MySQL时间戳和分组方式,带有两个表

MySQL时间戳和分组方式,带有两个表,sql,mysql,group-by,greatest-n-per-group,Sql,Mysql,Group By,Greatest N Per Group,我有一个包含3个字段的表: ID(非唯一,非主键) 时间戳 marker 我想为每个不同的ID获取最后一个条目,但是当我选择ID时,表GROUP BY ID的max(timestamp)标记字段是错误的 我有另一个包含以下字段的表: ID(唯一,主键) lat 液化天然气 我想执行相同的查询,但同时使用lat和lng字段,但由于我不能执行第一步,我不知道应该使用哪种查询。我一直在努力,但没有成功 有人能给我指出正确的方向吗?非常感谢。拥有一个并非唯一的ID列听起来“出乎意料”,但这一列应

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

  • ID
    (非唯一,非主键)
  • 时间戳
  • marker
我想为每个不同的
ID
获取最后一个条目,但是当我选择ID时,表GROUP BY ID的max(timestamp)标记字段是错误的

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

  • ID
    (唯一,主键)
  • lat
  • 液化天然气
我想执行相同的查询,但同时使用
lat
lng
字段,但由于我不能执行第一步,我不知道应该使用哪种查询。我一直在努力,但没有成功


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

拥有一个并非唯一的
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
第二个group by将确保在同一
id
timestamp
有更多记录的情况下,只获得一行

更新:编辑查询以加入
t2


如果
t1
中的
id
s在
t2
中不存在,请使用
LEFT JOIN
lat
lng
对于该行将是
NULL

Dup:,,,太好了!非常感谢你的回答。ID在表中不唯一的原因是,我需要客户端ID执行的所有事务的所有条目。我将在家测试您的查询一次。如何将其连接到具有相同ID(但唯一)的第二个表table2,以获取仅在第二个表中的lat和lng字段?Thanks@charo:编辑我的答案以添加
t2
中的列。谢谢Peter,我愿意在家测试:)如果是这样,您应该
接受我的答案。你也可以投票,但那当然是你的决定:)