我只有一个大表Samples,其中包含ID和Values列。 对于每个间隙,我只需要得到一条记录,然后就可以从表中丢失记录。 我需要帮助来建立查询。
表格:
Id | Values
---------
1 | 45
2 | 45
3 | 44
5 | 89
6 | 21
7 | 59
9 | 23
10 | 78
11 | 12
12 | 16
15 | 19
查询结果:
Id | Values
---------
3 | 44
7 | 59
12 | 16
答案 0 :(得分:0)
类似这样的东西:
SELECT s1.*
FROM samples s1
WHERE NOT EXISTS (SELECT id
FROM samples s2
WHERE s2.id = s1.id + 1)
为了避免总是选择最后一行,您应该添加:
AND EXISTS (SELECT id
FROM samples s3
WHERE s3.id > s1.id)
答案 1 :(得分:0)
由于您没有标记数据库名称,因此可以将以下逻辑视为任何数据库的通用逻辑-
SELECT * FROM your_table A
LEFT JOIN your_table B ON A.Id = B.Id - 1
WHERE B.Id IS NULL
AND A.Id < (SELECT MAX(ID) FROM your_table)
ORDER BY A.Id
如果您使用的是MSSQL 2012或更高版本,则可以使用LEAD通过以下脚本实现所需的输出-
SELECT A.Id,A.[Values]
FROM
(
SELECT *,LEAD(ID) OVER(ORDER BY ID) Lead_Value
FROM your_table
)A
WHERE Lead_Value- ID >1