[英]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对其进行分组。
我还觉得我已经完成了繁琐的工作,正在寻找可以帮助您以最佳/最有效方式解决此问题的人员的指导
假设所有的empid
和numbers
都在表的某个位置,则可以使用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.