Thi*_*ode 2 mysql join audit-tables greatest-n-per-group
可能的重复:
获取列具有最大值的行
我有一个人员审计表以及他们在特定时间戳拥有的股份数量。如何获取给定 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
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
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
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情:
select a.* from audittable a join audittable b
on a.id = b.id
where a.dateadded > b.dateadded;
Run Code Online (Sandbox Code Playgroud)
但这只给了我那些重复的最新记录。在这种情况下,ids 1,2 而不是 3。如何在没有子查询或临时表的情况下获取所有 ID 的最新记录列表?
您将需要一个子查询,但不需要子选择(这会对性能造成非常不利的影响)。
JOIN针对返回id和MAX(dateadded)聚合的子查询。需要子查询连接才能匹配包含最新时间戳的行中的所有其他列值。
SELECT
audittable.id,
name,
shares,
audittable.dateadded
FROM
audittable
/* Subquery returns id dateadded grouped by id */
JOIN (
SELECT id, MAX(dateadded) AS dateadded FROM audittable GROUP BY id
/* JOIN condition is on both id and dateadded between the two tables */
) maxtimestamp ON audittable.id = maxtimestamp.id AND audittable.dateadded = maxtimestamp.dateadded
Run Code Online (Sandbox Code Playgroud)