从SQL表中选择每个唯一ID的3个

时间:2014-04-01 22:49:53

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

我有一个SQL问题。我使用SQL并不是很强大,并认为这里的某个人可以帮助我。任何帮助,将不胜感激。提前谢谢。

我有一个SQL表,包含以下内容:

id INT,
lat VARCHAR(255),
lon VARCHAR(255),
timestamp TIMESTAMP

此表格包含来自多个不同ID的几个gps位置。主键是ID和时间戳。

我需要做的是从每个唯一ID中选择最新的3组坐标。什么是实现这一目标的最佳方式?

1 个答案:

答案 0 :(得分:0)

好的,经过不少编辑后,下面的确应该有效。我测试了它,它很干净。

SELECT t.id, t.lat, t.lon, t.timestamp
FROM table t
LEFT OUTER JOIN table t2
  ON (t.id = t2.id AND t.timestamp < t2.timestamp)
GROUP BY t.id, t.lat, t.lon, t.timestamp
HAVING COUNT(*) < 3
ORDER BY t.id, t.timestamp desc;

请注意,我发现Oracle和MySQL仍然不支持子查询中的/ order限制令人非常沮丧!第一次这会让这更简单......