sql - 使用sql获取数字列表之间的缺失数字

标签 sql sql-server

在我的数据库中我有 10 个用户编号,其中一些已被删除,当我选择列时显示如下:

missing_user_number:
        1,
        2,
        5,
        8,
        10,

而且我需要知道是否有一个脚本可以像这样获取缺失的数字,我不想恢复已删除的数据,我只想将缺失的数字作为一个整数数据:

missing_user_number:
        3,
        4,
        6,
        7,
        9,

最佳答案

在大多数 SQL 版本中,获取缺失值的范围实际上比获取每个缺失值更容易:

select user_number + 1 as missing_range_start, next_user_number - 1 as missing_range_end
from (select t.*,
             lead(user_number) over (order by user_number) as next_user_number
      from t
     ) t
where user_number <> user_number + 1;

注意:这只会找到内部缺失的数字,如您问题中的示例所示。

关于sql - 使用sql获取数字列表之间的缺失数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42249703/

相关文章:

MySQL 查询 JOIN 返回 1 个空字段

Java 连接到 SQL Server 数据库 : Login failed for user 'sa'

sql - 如何去除 Oracle SQL 中的多个 "not like"子句?

mysql - SQL/MySQL 查询(搜索标志更改)?

sql-server - 如何将 NOT NULL FOREIGN KEY 列添加到 MS SQL 中的现有(已填充)表中?

c# - Dapper 将列映射到实体属性?

c# - 如何使用 Azure 的弹性数据库设置 Multi-Tenancy ?

c# - 为什么这个交易范围不起作用?

sql - 与 Oracle 的 CONNECT BY ... START WITH 等效的 PostgreSQL 语法是什么?

mysql - 如何连接两个表