我制作了一个小型修订系统,每次修改时都会存储新版本的文本。
表格如下:
+-------+-----+----------+
| revID | nID | text |
+-------+-----+----------+
| 1 | 1 | foo |
+-------+-----+----------+
| 2 | 1 | newfoo |
+-------+-----+----------+
| 3 | 2 | bar |
+-------+-----+----------+
| 4 | 2 | baz |
+-------+-----+----------+
| 5 | 3 | a |
+-------+-----+----------+
什么SQL语句会为每个nID提供最后插入的行?像这样:
+-------+-----+----------+
| revID | nID | text1 |
+-------+-----+----------+
| 2 | 1 | newfoo |
+-------+-----+----------+
| 4 | 2 | baz |
+-------+-----+----------+
| 5 | 3 | a |
+-------+-----+----------+
答案 0 :(得分:3)
创建子查询的想法是为每个RevID
获取最大 NID
,然后将其连接到表本身但是有两个连接条件:它匹配使用NID
并且它也与RevID
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT nid, MAX(revID) maxID
FROM tableName
GROUP BY nid
) b ON a.nid = b.nid AND
a.revID = b.maxID