查询帮助需要查找丢失的数字

时间:2010-08-25 14:09:19

标签: sql oracle10g

我有一张看起来像这样的表:

ID         | GROUP
-------------------
1000001    | 0
1000001    | 1
1000001    | 2
1000002    | 0
1000002    | 2
1000002    | 3
1000003    | 1
1000003    | 2
1000003    | 3
1000004    | 0

我需要列出序列中缺少组的所有ID。 所以对于上面的例子我只需要1000002& 1000003。

提前致谢

4 个答案:

答案 0 :(得分:2)

select distinct id
from
(
    SELECT Id, Group, LAG(Group, 1, -1) over (partition by Id order by Group) prevGroup
 FROM Table
 )     
 WHERe Group -1 <> PrevGroup

答案 1 :(得分:2)

由于我们不需要有关缺失组编号的信息,我们可以比较特定组的所有元素数量是否相等

SELECT ID FROM YOUR_TABLE
GROUP BY ID 
HAVING COUNT(ID) <= max(GROUP);

答案 2 :(得分:0)

也许这个:

SELECT
  id
FROM mytable m
GROUP BY id
HAVING (MAX(group) + 1) > COUNT(DISTINCT group);

(我用小写字母写了)。如果(ID, GROUP)上有唯一键,则可以省略DISTINCT

答案 3 :(得分:0)

我从你的评论中得到的是,ID必须从一组0开始,并且组总是应该只增加1.从那里,我得到了这个:

SELECT id
FROM (
        SELECT  id, count(*) as cnt, max(group) as mx, min(group) as mn
        FROM    myTable
        GROUP BY group
     ) A
WHERE NOT mx = cnt - 1
AND NOT mn = 0

希望这会有所帮助。它可能不是最干净或最有效的,但希望它会有所帮助。

编辑:实际上,在重新审视我之前的答案并考虑HAVING后,它可能会更加清晰。

SELECT ID
FROM   myTable
GROUP BY ID
HAVING MAX(group) >= COUNT(DISTINCT group)