从日志表中为每个用户选择最后一个条目

时间:2013-03-08 08:43:17

标签: 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
    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

但是我不认识它最好的一个,因为对于许多记录来说太慢了...... 你能不能建议我更好一个

2 个答案:

答案 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