MySQL时间戳和GROUP BY有两个表

时间:2010-03-08 09:29:22

标签: sql mysql group-by greatest-n-per-group

我有一个包含3个字段的表:

  • ID(不是唯一的,不是主键)
  • timestamp
  • marker

我希望得到每个不同ID的最后一个条目,但是当我执行SELECT ID, max(timestamp) from table GROUP BY ID时,标记字段是错误的。

我有另一个包含以下字段的表:

  • ID(唯一,主键)
  • lat
  • lng

我想执行相同的查询,但同时使用latlng字段,但由于我无法执行第一步,因此我不知道应该使用哪种查询我用。我一直在尝试没有成功。

有人能指出我正确的方向吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

拥有一个不唯一的ID列听起来“意外”,但是这个列应该能够获得预期的行:

SELECT t.id, t.timestamp, MAX( t.marker ) marker,
       t2.lat, t2.lng
FROM table t
JOIN (
    SELECT id, MAX(timestamp) ts
    FROM table
    GROUP BY id
) tx ON ( tx.id = t.id AND tx.ts = t.timestamp )
JOIN t2 ON ( t2.id = tx.id )
GROUP BY t.id, t.timestamp

第二个分组将确保您只获得一行,以防同一idtimestamp有更多记录。

更新:已编辑查询以加入t2

如果LEFT JOINid中存在t1 t2lat,则lng使用NULL。对于那些行,{{1}}和{{1}}将为{{1}}。