mysql - 如何从 MySQL 表中获取同一 ID 的最新时间戳记录?

标签 mysql join greatest-n-per-group audit-tables

<分区>

Possible Duplicate:
Fetch the row which has the Max value for a column

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

最佳答案

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

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

Here is a demonstration on SQLfiddle

关于mysql - 如何从 MySQL 表中获取同一 ID 的最新时间戳记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498693/

相关文章:

postgresql - 在 ZF2 中使用 tablegateway 连接 2 个表

mysql - 是否可以在不知道 JOIN 在哪一列上完成的情况下进行 JOIN?

sql - 如何强制 MS SQL Server 执行索引连接?

mysql - sql 获取具有最大日期和相对 id 记录的行

sql - mysql查询调优

java - 通信链路故障 ClearDB

mysql - MySQL中select语句中使用Regexp的正确方法

Mysql - 如何根据第一个表的 2 列中的值显示第二个表中的列?

mysql - 同表子查询优化

c++ - 将类映射到 mySql 表,而不在 cpp 中使用 ODB 或其他框架