0

我有一个带有 id 和 number_col 的项目表。Stackoverflow 上有很多关于寻找 ID 差距的问题,但我正在寻找的是数量上的差距。例如,如果我有 3 个项目:

编号 | number_col
================
1 | 1
1 | 2
1 | 4

我需要一个返回 id = 1, number_col = 3 缺失的 SQL 查询。查询应该查看每个 id 的 number_col 中的最大值。由于在我的示例中 4 是 id 1 的最大 number_col 值,因此它不应该返回 1,缺少 5。

4

2 回答 2

1

你可以使用这个查询

select * 
from table_name 
where col_name - 1 NOT IN (select col_name from table_name) 
GROUP BY col_name having col_name > MIN(col_name);

GROUP BY col_name having col_name > MIN(col_name)丢弃第一行。

于 2021-12-08T10:08:16.673 回答
0

如果您想要缺失值的范围,则:

select number_col + 1 as first_missing, (next_nc - 1) as last_missing
from (select t.*, lead(number_col) over (partition by id order by number_col) as next_nc
      from t
     ) t
where next_nc <> number_col + 1
于 2019-02-20T15:45:04.677 回答