Select 第一个缺少 0 以上的 id
Select first missing id above 0
我的列 (ID) 中有值
5
6
9
我想 select 首先从 0 上面丢失 ID。我希望 select 值将是 1。(如果 1 存在则它将 selects 2 等等.. .).
我正在使用此代码:
SELECT MIN(id) As MinMissingId FROM table1 where id>=0
但我的结果是第一个存在的ID并且没有丢失
您可以根据相关 question 中的答案来完成此操作。
select (case when min(id) > 0 then 1 else min(id) + 1 end)
from table1 t
where not exists (select 1
from table1 t2
where t2.id = t.id + 1
);
思路是找到第一个丢失的id。如果更大
这将 return 下一个以 1 开头的未使用 ID,适用于所有情况,例如table 为空或没有间隙:
WITH cte AS
(
SELECT id FROM tab
UNION ALL
SELECT 0
)
SELECT MIN(id) + 1
FROM cte
WHERE NOT EXISTS
(
SELECT *
FROM tab
WHERE tab.id = cte.id + 1
)
我的列 (ID) 中有值
5
6
9
我想 select 首先从 0 上面丢失 ID。我希望 select 值将是 1。(如果 1 存在则它将 selects 2 等等.. .). 我正在使用此代码:
SELECT MIN(id) As MinMissingId FROM table1 where id>=0
但我的结果是第一个存在的ID并且没有丢失
您可以根据相关 question 中的答案来完成此操作。
select (case when min(id) > 0 then 1 else min(id) + 1 end)
from table1 t
where not exists (select 1
from table1 t2
where t2.id = t.id + 1
);
思路是找到第一个丢失的id。如果更大
这将 return 下一个以 1 开头的未使用 ID,适用于所有情况,例如table 为空或没有间隙:
WITH cte AS
(
SELECT id FROM tab
UNION ALL
SELECT 0
)
SELECT MIN(id) + 1
FROM cte
WHERE NOT EXISTS
(
SELECT *
FROM tab
WHERE tab.id = cte.id + 1
)