Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从日志表中为每个用户选择最后一项_Mysql_Sql - Fatal编程技术网

Mysql 从日志表中为每个用户选择最后一项

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

您好,我对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
但我不认为这是最好的一张,因为它的速度太慢了。。。
如果表中只有两列,下面的查询将满足您的需要

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的内部联接。。。。。。哪里