2016-06-08 62 views
0

我有一个表来记录用户上次登录的详细检索最后一条记录各组中没有主键

event_name userID value     created_at 
------------------------------------------------------------- 
last_login 12 2016-06-02 11:06:29 2016-06-02 11:06:29 
last_login 12 2016-06-02 10:16:11 2016-06-02 10:16:11  
last_login 14 2016-06-02 10:11:13 2016-06-02 10:11:13  
last_login 17 2016-05-02 10:16:29 2016-05-02 10:16:29  
last_login 14 2016-05-02 10:15:11 2016-06-02 10:15:11  

预期结果:

event_name userID value     created_at 
------------------------------------------------------------- 
last_login 12 2016-06-02 11:06:29 2016-06-02 11:06:29 
last_login 14 2016-06-02 10:11:13 2016-06-02 10:11:13  
last_login 17 2016-05-02 10:16:29 2016-05-02 10:16:29  

我要抢的用户ID此表信息组,我通过created_at命令并显示timesAgo fromat(例如1小时前)的值,但是我没有获得使用group的最新记录,例如,对于userID = 12,我得到的值= 2016-06-02 10:16: 11而不是值= 2016-06-02 11:06:29

+0

还指定预期的结果! – jarlh

+0

什么是你的SQL查询? – Igoranze

+0

你使用什么数据库数据类型作为'value'? –

回答

1

如果我理解正确的话,你可以用NOT EXISTS()实现这一目标:

SELECT * FROM YourTable t 
WHERE NOT EXISTS(SELECT 1 FROM YourTable s 
       WHERE s.created_at > t.created_at 
        AND s.userID = t.userID) 
+0

我想我没有让自己明确的问题,我已经添加了预期的结果,使其更清楚我需要什么 –

+0

对不起,还是不明白,为什么有一次你选择最大的日期,一次是最小的?! @KuldeepDangi – sagi

+0

记录由'USERID' –

1

试试这个。

首先,我从created_at和用户ID获得最大,然后我加入让孔列

SELECT d.* FROM (
    SELECT 
     userID, MAX(created_at) AS created_at 
    FROM 
     tablename 
    GROUP BY userID) AS `keys` 
LEFT JOIN tablename d ON 
    d.userID = `keys`.userID 
    AND 
d.created_at = `keys`.created_at; 

样品

MariaDB []> SELECT d.* FROM (
    -> SELECT 
    ->  userID, MAX(created_at) AS created_at 
    -> FROM 
    ->  tablename 
    -> GROUP BY userID) AS `keys` 
    -> LEFT JOIN tablename d ON 
    -> d.userID = `keys`.userID 
    -> AND 
    -> d.created_at = `keys`.created_at; 
+--------+----------------------------+ 
| userID | created_at     | 
+--------+----------------------------+ 
|  1 | 0000-00-00 00:00:00.000000 | 
|  2 | 2016-06-03 13:16:07.000000 | 
+--------+----------------------------+ 
2 rows in set (0.00 sec) 

MariaDB []> 
+0

在mysql中运行这个查询导致语法错误'near AS keys' –

+0

@Kuldeep Dangi - 抱歉 - 我的错误 - 第一:keys是一个关键字,必须反引用或使用其他别名。第二:我忘记了max(created_date)的别名。我已经改变了我的答案。请再次测试 - 对不起 –

+0

现在它的工作很酷 –

相关问题