繁体   English   中英

查找序列中的缺失值(SQL)

[英]Find missing values in a sequence (sql)

表格1

Empid    number
----------------
100         1
100         2
100         4
100         5
100         6
101         1

我正在自学SQL,遇到的一项任务是按顺序找到丢失的值(最多12个),然后找出与哪个Empid相关联。

我尝试了一种采用上表的方法,开始像

SELECT a number +1 , Min("through), MIn(by number) - 1

整个方法使用现有数字来查找丢失的“下一个/上一个数字”。我能够输出缺少的数字。但是,我不知道如何使用关联的ID对其进行分组。

我还觉得我已经完成了繁琐的工作,正在寻找可以帮助您以最佳/最有效方式解决此问题的人员的指导

假设所有的empidnumbers都在表的某个位置,则可以使用cross join和过滤器来实现。 在MS Access中,这看起来像:

select e.empid, n.number
from (select distinct empid from t) as e,
     (select distinct number from t) as n
where not exists (select 1
                  from t
                  where t.empid = e.empid and t.number = n.number
                 ); 

您提供的数据将无法正常工作。 要解决这种情况,您需要一个包含12个要查找数字的表。

假定您创建一个具有Number列的Numbers表,其中Number列包含12个记录,值1到12。

SELECT N.*, E.*
FROM NUMBERS N
CROSS JOIN (SELECT Distinct EmpID FROM table1) E
LEFT JOIN table1 T
  on T.EmpID = E.EmpID
 and T.Number = N.Number
WHERE T.EmpID is null

或将派生表替换为上面的数字表

就像是

(Select 1 as Number UNION ALL
Select 2 as Number UNION ALL
Select 3 as Number UNION ALL
Select 4 as Number UNION ALL
Select 5 as Number UNION ALL
Select 6 as Number UNION ALL
Select 7 as Number UNION ALL
Select 8 as Number UNION ALL
Select 9 as Number UNION ALL
Select 10 as Number UNION ALL
Select 11 as Number UNION ALL
Select 112 as Number)

我不记得MS Access是否会让您这样做...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM