我的表格中包含一个非唯一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
类型,但我不确定。
答案 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);