我对Oracle SQL有疑问。
我的数据如下:
id year
-- ----
1 2000
1 2001
1 2002
1 2003
1 2006
1 2000
2 2001
2 2002
2 2003
3 2003
3 2005
4 2012
4 2013
我想要拥有2001年,2002年,2003年的id
。
我的结果集:
id
--
1
2
请帮我解决这个问题。我实际上试着搜索这个,但无法想办法搜索我的特定问题。
答案 0 :(得分:4)
<强> SQL 强>
SELECT t.id
FROM TABLE t
WHERE t.year in(2001,2002,2003)
GROUP BY t.id
示例SqlFiddle
http://sqlfiddle.com/#!2/4ec9f/2/0
<强>解释强>
您希望将数据集过滤为仅显示具有特定年份的行,因此您将其放在where子句WHERE t.year in(2001,2002,2003)
中。
由于单个ID可能在多年内,因此您的结果集将包含重复项。要删除重复项,您可以GROUP BY ID或使用DISTINCT语句仅显示唯一元素。
<强>更新强>
根据评论,这里的版本只会显示三年的ID。我们使用DISTINCT t.YEAR
来避免计算可能会多次重复一年的id。 HAVING COUNT(DISTINCT t.YEAR) = 3
部分确保我们只包含三年的ID。
SELECT t.id
FROM years t
WHERE t.year in(2001,2002,2003)
GROUP BY t.id
HAVING COUNT(DISTINCT t.YEAR) = 3
更新了sqlFiddle,其中包含一个数据集,其中id为3有两行,用于展示仅计算ID唯一年份的逻辑。
答案 1 :(得分:1)
select distinct id
from table
where year in(2001,2002,2003)