您好我的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
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
但是我不认识它最好的一个,因为对于许多记录来说太慢了...... 你能不能建议我更好一个
答案 0 :(得分:5)
SELECT user_id , MAX(date)
FROM alerts.alerts_log
GROUP BY user_id;
答案 1 :(得分:4)
如果表格中只有两列,则下面的查询就足以满足您的需求,
SELECT user_ID, MAX(date) max_date
FROM tableName
GROUP BY user_ID
但如果没有,并且您想要获取该行中的所有列,则需要具有子查询,该子查询分别获得每user_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