我有一个包含3个字段的表:
ID
(不是唯一的,不是主键)timestamp
marker
我希望得到每个不同ID
的最后一个条目,但是当我执行SELECT ID, max(timestamp) from table GROUP BY ID
时,标记字段是错误的。
我有另一个包含以下字段的表:
ID
(唯一,主键)lat
lng
我想执行相同的查询,但同时使用lat
和lng
字段,但由于我无法执行第一步,因此我不知道应该使用哪种查询我用。我一直在尝试没有成功。
有人能指出我正确的方向吗?非常感谢。
答案 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
第二个分组将确保您只获得一行,以防同一id
和timestamp
有更多记录。
更新:已编辑查询以加入t2
。
如果LEFT JOIN
中id
中存在t1
t2
中lat
,则lng
使用NULL
。对于那些行,{{1}}和{{1}}将为{{1}}。