SQL:如何只选择最新的交叉条目?

时间:2011-01-09 20:22:08

标签: sql

对于我的例子,我会这样写。

我有一张表calles地图。有这样的条目(简单):

ID,TITLE,MAP,VERSION.

现在我插入三张地图:

INSERT INTO maps VALUES(1,'MAP1','some blob stuff',1);
INSERT INTO maps VALUES(2,'MAP2','some blob stuff',1);
INSERT INTO maps VALUES(3,'MAP1','some blob stuff',2);

现在我有两张地图,但有两个版本。

我现在如何只选择每个的最新地图,那么它只会显示MAP1 vers 2和MAP2 vers 1?

2 个答案:

答案 0 :(得分:2)

SELECT M1.*
FROM maps M1
WHERE M1.version = (SELECT MAX(M2.version) FROM maps M2 WHERE M2.title = M1.title)

但我不明白为什么你需要避免GROUP BY

SELECT M1.id, M1.title, M1.map, MAX(M1.version)
FROM maps M1
GROUP BY M1.title

编辑 - 正如指出这第二个查询不能保证正确的id和地图值,坚持第一个

答案 1 :(得分:0)

 SELECT * FROM maps m1 WHERE NOT EXISTS
    (SELECT * FROM maps m2 WHERE m2.title = m1.title AND m2.version > m1.version)