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

时间:2017-09-20 16:39:14

标签: sql ms-access

表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对它进行分组。

我也觉得我的任务很复杂,我正在寻求任何可以提供最佳/最有效的解决方案的人的指导

2 个答案:

答案 0 :(得分:1)

假设所有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个数字的表。

答案 1 :(得分:0)

假设您创建一个数字表,其中包含12个记录值为1到12的Number列。

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是否允许你这样做......