在一个表中找不到记录之前或之后找到第一条记录

时间:2019-08-21 06:43:31

标签: sql

我只有一个大表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

2 个答案:

答案 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