首页 > 解决方案 > 选择所有不连续出现在 SQL 中的人

问题描述

我的表格 Persons 包含以下内容:

year    name
2015    John
2016    John
2017    John
2015    Mary
2015    Jennifer
2016    Jennifer
2015    Lisa
2016    Lisa
2017    Lisa

我怎样才能得到所有这些年来没有连续出现的人?

答案应该是:

2015    Mary
2015    Jennifer
2016    Jennifer

标签: sqloracle

解决方案


一种方法是按名称聚合,然后断言给定名称的不同年数不等于整个表中的总不同年数。

SELECT t1.name
FROM yourTable t1
INNER JOIN
(
    SELECT name
    FROM yourTable
    GROUP BY name
    HAVING COUNT(DISTINCT year) < (SELECT COUNT(DISTINCT year) FROM yourTable)
) t2
     ON t1.name = t2.name
ORDER BY
    t1.name,
    t1.year;

演示


推荐阅读