Mysql 从日志表中为每个用户选择最后一项
您好,我对sql有问题,它假定为许多用户选择每个用户的最后一个日志条目。 这是我的桌子的样子Mysql 从日志表中为每个用户选择最后一项,mysql,sql,Mysql,Sql,您好,我对sql有问题,它假定为许多用户选择每个用户的最后一个日志条目。 这是我的桌子的样子 user_id | date -------------------- 1 2013-03-06 10:00:00 17 2013-03-06 11:00:00 2 2013-03-06 10:00:00 5 2013-03-06 10:00:00 1 2013-03-06 11:00:00 1
user_id | date
--------------------
1 2013-03-06 10:00:00
17 2013-03-06 11:00:00
2 2013-03-06 10:00:00
5 2013-03-06 10:00:00
1 2013-03-06 11:00:00
17 2013-03-06 13:00:00
17 2013-03-06 13:01:00
2 2013-03-06 14:01:00
2 2013-03-06 15:00:00
2 2013-03-06 18:01:00
此查询的结果假定为
user_id | date
--------------------
1 2013-03-06 11:00:00
2 2013-03-06 18:01:00
5 2013-03-06 10:00:00
17 2013-03-06 13:01:00
现在我使用这个查询
SELECT
a.user_id,
(SELECT b.date FROM alerts.alerts_log as b WHERE b.user_id = a.user_id ORDER BY b.date DESC LIMIT 1) as date
FROM
alerts.alerts_log as a
WHERE
a.user_id IN (1,2,5,17)
GROUP BY a.user_id
但我不认为这是最好的一张,因为它的速度太慢了。。。
如果表中只有两列,下面的查询将满足您的需要
SELECT user_ID, MAX(date) max_date
FROM tableName
GROUP BY user_ID
用户ID的最大日期
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT user_ID, MAX(date) max_date
FROM tableName
GROUP BY user_ID
) b ON a.user_ID = b.user_ID AND
a.date = b.max_date
如果表中只有两列,下面的查询将满足您的需要
SELECT user_ID, MAX(date) max_date
FROM tableName
GROUP BY user_ID
但是,如果不是这样,并且您希望获取行中的所有列,则需要有子查询,它分别获取每个用户ID的最大日期
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT user_ID, MAX(date) max_date
FROM tableName
GROUP BY user_ID
) b ON a.user_ID = b.user_ID AND
a.date = b.max_date
感谢您的回答和SQLFIDLE演示的链接,但我检查了他的答案,因为我认为他是第一个。您好,John,如果我们在5个表上有相同的情况(最后一个条目-最大日期),查询应该如何进行。这意味着我的select语句包含来自5个表的字段,我有来自t1、t2、t3、t4、t5的内部联接。。。。。。哪里谢谢你的回答和SQLFiddle演示的链接,但我检查了他的答案,因为我认为他是第一个。你好,John,如果我们在5个表上有相同的情况(最后一个条目-最大日期),查询应该如何进行。这意味着我的select语句包含来自5个表的字段,我有来自t1、t2、t3、t4、t5的内部联接。。。。。。哪里