gpt4 book ai didi

sql - 如何在 SQL 运行计数器中找到 "gap"?

转载 作者:行者123 更新时间:2023-12-03 04:51:29 25 4
gpt4 key购买 nike

我想在 SQL 表的计数器列中找到第一个“间隙”。例如,如果有值 1、2、4 和 5,我想找出 3。

我当然可以按顺序获取值并手动检查它,但我想知道是否有办法在 SQL 中执行此操作。

此外,它应该是相当标准的 SQL,可与不同的 DBMS 配合使用。

最佳答案

MySQLPostgreSQL 中:

SELECT  id + 1
FROM mytable mo
WHERE NOT EXISTS
(
SELECT NULL
FROM mytable mi
WHERE mi.id = mo.id + 1
)
ORDER BY
id
LIMIT 1

SQL Server中:

SELECT  TOP 1
id + 1
FROM mytable mo
WHERE NOT EXISTS
(
SELECT NULL
FROM mytable mi
WHERE mi.id = mo.id + 1
)
ORDER BY
id

Oracle中:

SELECT  *
FROM (
SELECT id + 1 AS gap
FROM mytable mo
WHERE NOT EXISTS
(
SELECT NULL
FROM mytable mi
WHERE mi.id = mo.id + 1
)
ORDER BY
id
)
WHERE rownum = 1

ANSI(随处可用,效率最低):

SELECT  MIN(id) + 1
FROM mytable mo
WHERE NOT EXISTS
(
SELECT NULL
FROM mytable mi
WHERE mi.id = mo.id + 1
)

支持滑动窗口功能的系统:

SELECT  -- TOP 1
-- Uncomment above for SQL Server 2012+
previd
FROM (
SELECT id,
LAG(id) OVER (ORDER BY id) previd
FROM mytable
) q
WHERE previd <> id - 1
ORDER BY
id
-- LIMIT 1
-- Uncomment above for PostgreSQL

关于sql - 如何在 SQL 运行计数器中找到 "gap"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1312101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com