有特定年份数据的id

时间:2013-06-05 15:47:34

标签: sql oracle

我对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

请帮我解决这个问题。我实际上试着搜索这个,但无法想办法搜索我的特定问题。

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)