我有一个带有 ID(整数)和一个文本字段(名称)的表。我当前的查询如下所示:
SELECT id, name FROM table WHERE id <= X ORDER BY id DESC
X 是我从另一个查询中获得的 ID。这个查询当前所做的是输出低于我输入的 ID 的所有条目,按 ID 排序。
我想要实现的是,这仅在 ID 中的第一个“间隙”之前完成 - 例如,使用这样的表:
id name
1 Test 1
2 Test 2
3 Test 3
6 Test 6
7 Test 7
8 Test 8
9 Test 9
Run Code Online (Sandbox Code Playgroud)
我想要一个只返回以下集合的查询X = 8
:
id name
8 Test 8
7 Test 7
6 Test 6
Run Code Online (Sandbox Code Playgroud)
因为那样的话,ID 之间存在差距(ID 5 丢失),然后我不需要其他较低的 ID。
那怎么可能呢?
这应该有效:
SELECT id, name
FROM data
WHERE id <= 8 AND id >= (
SELECT MAX(d1.id)
FROM data d1
LEFT JOIN data d2 ON d2.id = d1.id - 1
WHERE d2.id IS NULL
)
ORDER BY id DESC
;
Run Code Online (Sandbox Code Playgroud)
子查询查找第一个间隙(即 5 到 6)。请参阅SQL 小提琴。
id | name
8 | Test 8
7 | Test 7
6 | Test 6
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35 次 |
最近记录: |