1

可能重复:
获取列的最大值所在的行

我有一个人的审计表以及他们在特定时间戳拥有的股份数量。如何获取给定 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 的最新记录列表?

4

2 回答 2

5

您将需要一个子查询,但不需要子选择(对性能有非常负面的影响)。

JOIN针对返回idMAX(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

这是关于 SQLfiddle 的演示

于 2012-11-21T17:26:28.060 回答
2

没有子查询,您仅限于此

SELECT id, MAX(dateAdded)
FROM audittable
GROUP BY id

如果您想要其他列,则需要像 Michael Berkowski's answer 这样的子查询

于 2012-11-21T17:24:58.750 回答