我有一张看起来像这样的表:
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。
提前致谢
答案 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)