1

您好,我的 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

但我不认为它是最好的,因为对于许多记录来说太慢了……你能推荐我更好的吗

4

2 回答 2

5
SELECT user_id , MAX(date)
FROM alerts.alerts_log
GROUP BY user_id;
于 2013-03-08T08:45:30.803 回答
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
于 2013-03-08T08:44:47.487 回答