MySQL选择最新出现的GROUP BY' d字段

时间:2016-08-09 20:46:15

标签: mysql sql

我的表格中包含一个非唯一ID,id,状态status(我试图获取),以及插入时间的时间戳, inserted。我需要选择id订购的每个id的最新事件。我有inserted命令的下表:

id  |  status  |  inserted
------------------------------------
4   | approved | 2016-08-09 15:51:52
5   | denied   | 2016-08-09 15:52:36
5   | pending  | 2016-08-09 15:55:05

我需要的结果是:

id  |  status  |  inserted
------------------------------------
4   | approved | 2016-08-09 15:51:52
5   | pending  | 2016-08-09 15:55:05

我有以下SELECT:

SELECT * FROM table
   GROUP BY id
   ORDER BY inserted

我得到了这些结果:

id  |  status  |  inserted
------------------------------------
4   | approved | 2016-08-09 15:51:52
5   | denied   | 2016-08-09 15:52:36

解决方案可能是一个简单的解决方案,但是我已经在这么长时间内尝试了内心选择和诸如此类的东西。任何帮助将不胜感激。

修改

我必须使用链接的重复问题中的第三个选项来获得我期望的结果(具有LEFT JOIN的结果)。我认为这是因为我使用DATETIME类型,但我不确定。

2 个答案:

答案 0 :(得分:0)

select t.*
from
    <T> t inner join
    (select id, max(inserted) as max_inserted from <T> group by id) as m
        on m.id = t.id and m.max_inserted = t.inserted

 select
     id,
     (
         select status from <T> t2
         where t2.id = t.id and t2.inserted = max_inserted
     ) as status,
     max(inserted) as max_inserted
 from <T>
 group by id

您可以尝试搜索“mysql latest per group”或类似的内容,以获取更具针对MySQL的替代方案。

答案 1 :(得分:0)

如果您想要每个id的最新记录,请不要使用group by。代替:

select t.*
from table t
where t.inserted = (select max(t2.inserted) from table t2 where t2.id = t.id);