有999行,它们有0到1000个不同的数字,其中缺少一个数字。如何使用SQL查询找到该数字?
答案 0 :(得分:2)
使用类似的东西:
SELECT Min(ID) As firstMissedID
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY ID) rn
FROM std) dt
WHERE rn < ID
答案 1 :(得分:0)
不确定这是否是最佳方法,但它会起作用。
使用列创建临时表以保存整数值 = @ temptbl1
使用值1到1000填充表格,然后运行此查询,只有在数据表中没有包含该条目时才会返回该条目。
select value from @temptable1 where value not in (select Othervalue from othertable)
select语句将返回所有缺失值。
答案 2 :(得分:0)
我假设数字列只有0到1000之间的数字。
declare @minnumber int
declare @missingnumber int
select @minnumber=min(number) from Test
if(@minnumber=0)
begin
--500500 is the sum of 1 to 1000 number
select @missingnumber=500500-sum(number) from Test
end
else
begin
set @missingnumber=0
end
答案 3 :(得分:0)
使用tally table
获取1000行的列表,然后使用LEFT OUTER JOIN
或NOT EXISTS
查找丢失的数字
WITH Tally (n) AS
(
-- 1000 rows
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n)
CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)
CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)
)
SELECT Min(n)
FROM Tally T
LEFT OUTER JOIN YOURTABLE Y
ON T.N = Y.MISSING_NUM_COLUMN
WHERE Y.MISSING_NUM_COLUMN IS NULL
如果您想查找缺失数字的列表,请从上一次MIN
查询中删除select
运算符。
SELECT Missing_Numbers = n
FROM Tally T
LEFT OUTER JOIN YOURTABLE Y
ON T.N = Y.MISSING_NUM_COLUMN
WHERE Y.MISSING_NUM_COLUMN IS NULL