我有一个人员审计表和他们在特定时间戳拥有的股票数量。如何获取给定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;
但这只给了我那些重复的最新记录。在这种情况下,ids 1,2而不是3.如何在没有子查询或临时表的情况下获取所有ID的最新记录列表?
答案 0 :(得分:4)
您需要一个子查询,但不是子选择(性能受到很大影响)。
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
答案 1 :(得分:2)
如果没有子查询,则仅限于此
SELECT id, MAX(dateAdded)
FROM audittable
GROUP BY id
如果你想要其他列,你需要像Michael Berkowski的回答那样的子查询