Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找最小值和最大值之间的间隙_Sql_Sql Server_Max_Min - Fatal编程技术网

Sql 查找最小值和最大值之间的间隙

Sql 查找最小值和最大值之间的间隙,sql,sql-server,max,min,Sql,Sql Server,Max,Min,两张桌子 由VoucherCode(可空int)和Scheme(bigint)组成的成员 Scheme—由schemeId(bigint)、mincode(int)、maxcode(int)组成 我需要在最小和最大代码中查找成员的VoucherCode中的任何间隙。如果mincode为1,maxcode为10,而现有的vouchercodes为2、3和4,则应返回1。如果存在代码1、2和4,则应返回3。如果存在1、2和3,则应返回4 这就是我到目前为止所做的: SELECT MIN(ID +

两张桌子 由VoucherCode(可空int)和Scheme(bigint)组成的成员 Scheme—由schemeId(bigint)、mincode(int)、maxcode(int)组成

我需要在最小和最大代码中查找成员的VoucherCode中的任何间隙。如果mincode为1,maxcode为10,而现有的vouchercodes为2、3和4,则应返回1。如果存在代码1、2和4,则应返回3。如果存在1、2和3,则应返回4

这就是我到目前为止所做的:

SELECT  MIN(ID + 1) FROM (
    SELECT mincode AS ID from Scheme as s UNION ALL 
    SELECT  
        MIN(vouchercode + 1)
    FROM    
        member mmm where mmm.voucherCode is not null
        ) AS T1
WHERE
    ID+1 NOT IN (SELECT vouchercode as ID FROM member m where voucherCode is not null) 

它可以工作,但不适用于所有3种场景。如果存在2、3和4,则返回null而不是1。1、3和4存在,然后它返回2,对吗!1、2和3存在,它返回null,而不是4

这里有一种使用理货台的方法。我的系统中有一个CTE视图,但我在这里提取了它们。如果需要,可以将理货表扩展到更多行

WITH
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
    E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
    E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
    cteTally(N) AS 
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
    )

select MIN(t.N)
from cteTally t
left join Scheme s on s.ID = t.N
where s.ID is null

这将是一个非常简单的理货表。