我有一个带有列的数据库表ABC:ID,last_updated,Value等等,所以如果ID上有任何更新,那么它会插入新行而不删除具有相同ID的现有行,那么我怎样才能获得最新的每个ID的行?
e.g。
1, 20 march 2013, 45
1, 11 march 2012, 43
2, 12 march 2014, 10
3, 1 july 2014, 111
3, 17 march 2014, 112
所以我想要以下结果:
1, 20 march 2013, 45
2, 12 march 2014, 10
3, 1 july 2014, 111
答案 0 :(得分:2)
Select *
from abc a
inner join (select id, max (last_updated) last_updated
from abc
group by id) b on a.id = b.id and a.last_updated = b.last_updated
获取最大日期和按ID分组将为您提供最新记录。然后自我加入将给你所有的记录。
答案 1 :(得分:1)
您正在寻找的是名为"groupwise maximum"的着名查询。有几种获取行的方法,这里是没有子查询的解决方案:
SELECT t1.id, t1.last_updated, t1.value
FROM ABC t1
LEFT JOIN ABC t2
ON t1.id = t2.id AND t1.last_updated > t2.last_updated
WHERE t2.id IS NULL;