Mysql 如何从数据库中提取特定列的最新行?
我在数据库中有下表Mysql 如何从数据库中提取特定列的最新行?,mysql,sql,Mysql,Sql,我在数据库中有下表 +----+---------+---------------------+-----------+ | id | user_id | timeid | course_id | +----+---------+---------------------+-----------+ | 02 | 2 | 2016-01-27 19:24:17 | 14 | | 03 | 2 | 2016-02-27 19:24:27
+----+---------+---------------------+-----------+
| id | user_id | timeid | course_id |
+----+---------+---------------------+-----------+
| 02 | 2 | 2016-01-27 19:24:17 | 14 |
| 03 | 2 | 2016-02-27 19:24:27 | 15 |
| 04 | 2 | 2016-03-27 19:24:37 | 16 |
| 05 | 3 | 2016-01-27 19:24:17 | 19 |
| 06 | 3 | 2016-02-27 19:24:27 | 18 |
| 07 | 3 | 2016-03-27 19:24:37 | 17 |
+----+---------+---------------------+-----------+
如何仅为每个用户id提取按timeid
排序的最新行
换言之:
| 04 | 2 | 2016-03-27 19:24:37 | 16 |
| 07 | 3 | 2016-03-27 19:24:37 | 17 |
您可以使用mysql查询,如
SELECT id, user_id, timeid, course_id FROM tablename ORDER BY timeid DESC GROUP BY user_id;
您可以使用mysql查询,如
SELECT id, user_id, timeid, course_id FROM tablename ORDER BY timeid DESC GROUP BY user_id;
您可以使用以下查询:
SELECT t1.id, t1.user_id, t1.timeid, t1.course_id
FROM mytable as t1
JOIN (
SELECT user_id, MAX(timeid) AS timeid
FROM mytable
GROUP BY user_id
) AS t2 ON t1.user_id = t2.user_id AND t1.timeid = t2.timeid
t2
是一个派生表,其中包含每个用户id
的最新timeid
值。如果将原始表加入到该表中,则可以返回具有最新每组值的记录的所有字段。您可以使用以下查询:
SELECT t1.id, t1.user_id, t1.timeid, t1.course_id
FROM mytable as t1
JOIN (
SELECT user_id, MAX(timeid) AS timeid
FROM mytable
GROUP BY user_id
) AS t2 ON t1.user_id = t2.user_id AND t1.timeid = t2.timeid
t2
是一个派生表,其中包含每个用户id
的最新timeid
值。如果将原始表加入到该表中,则可以返回具有最新每组值的记录的所有字段。一种简单的方法是使用=
和相关子查询:
select t.*
from t
where t.timeid = (select max(t2.timeid) from t t2 where t2.user_id = t.user_id);
一种简单的方法是使用
=
和相关子查询:
select t.*
from t
where t.timeid = (select max(t2.timeid) from t t2 where t2.user_id = t.user_id);
这里有一个错误,我假设应该是
和t1.timeid=t2.timeid
而不是和t1.timeid=t2.user\u id
。这里有一个错误,我假设应该是和t1.timeid=t2.timeid
而不是和t1.timeid=t2.user\u id
。