首页 > 解决方案 > 在一个表中查找缺失记录之前或之后的第一条记录

问题描述

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

标签: sql

解决方案


像这样的东西:

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)

推荐阅读