【发布时间】:2012-11-10 00:35:42
【问题描述】:
我有一个人员审计表,以及他们在特定时间戳所拥有的股份数量。如何获取给定 id 的最新记录?
mysql 审计表
id name shares dateadded
1 Abc 12 2012-10-06 12:18:21
2 Klm 23 2012-10-06 12:18:21
3 Jim 45 2012-10-06 12:18:21
1 Abc 35 2012-11-06 12:18:21
1 Abc 65 2012-11-17 12:18:21
2 Klm 13 2012-11-06 12:18:21
我想要的输出:
id name shares dateadded
1 Abc 65 2012-11-17 12:18:21
2 Klm 13 2012-11-06 12:18:21
3 Jim 45 2012-10-06 12:18:21
我可以这样做:
select a.* from audittable a join audittable b
on a.id = b.id
where a.dateadded > b.dateadded;
但这只会给我那些重复的最新记录。在这种情况下,id 为 1,2 而不是 3。如何在没有子查询或临时表的情况下获取所有 ID 的最新记录列表?
【问题讨论】:
-
这是一个理论问题吗?为什么不是子查询? @Michael 的答案可能是最快的方法,有适当的索引。
-
根本不是理论上的。我想的不对! Marc 之前的回答也适用 select a.*, max(dateadded) from audittable group by id;不是吗?
-
比尔,可能。我觉得我的问题很清楚,供其他人阅读和理解。另一个链接是 Oracle 的。
标签: mysql join greatest-n-per-group audit-tables