按 x DESC 排序 - 但仅限连续行

Flo*_*ach 1 mysql order-by

我有一个带有 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。

那怎么可能呢?

Jul*_*eur 5

这应该有效:

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)