2

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

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

我想获得每个 distinct 的最后一个条目ID,但是当我这样做时
SELECT ID, max(timestamp) from table GROUP BY ID
,标记字段是错误的。

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

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

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

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

4

1 回答 1

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

第二个 group by 将确保您只获得一行,以防有更多相同的记录idtimestamp

更新:编辑查询加入t2

在中不存在的LEFT JOIN情况下使用。然后将用于该行。idt1t2latlngNULL

于 2010-03-08T09:39:43.413 回答