2013-06-05 4 views
0

Oracle SQL과 관련하여 질문이 있습니다.특정 연도 데이터가있는 ID의 사람

내 데이터는 다음과 같습니다

id 
-- 
1 
2 

도와주세요 :

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 년대를 원하는 이걸로 나. 나는 실제로 이것을 검색해 보았지만 나의 특별한 문제를 검색 할 방법을 찾지 못했습니다.

답변

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 문을 사용하여 고유 한 요소 만 표시하십시오.

UPDATE

는 의견을 바탕으로, 여기에만 모두 3 년이 아이디의를 표시하는 버전입니다. 우리는 DISTINCT t.YEAR을 사용하여 아마도 1 년이 여러 번 반복되는 ID 계산을 피합니다. HAVING COUNT(DISTINCT t.YEAR) = 3 부분에는 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 

3의 ID가 만 ID에 대해 고유 한 년 수를 계산 논리를 자랑하는 2003 개의 행이 데이터 세트를 포함 sqlFiddle을 업데이트했습니다.

+1

정말 DISTINCT 만 사용해야합니다. 매뉴얼을 참조하십시오. 일부 제 3 자 웹 사이트가 아닙니다. – Kermit

+0

@FreshPrinceOfSO 나는 사람들이 반환 된 데이터를 이해하지 않고 항상 사용하는 것을 보았 기 때문에'DISTINCT '를 사용하지 않는 경향이 있습니다. 종종 나쁜 조인 때문에 중복을 제거하는 데 사용되는 것을 본 적이 있습니다. 하지만 네 말이 맞다.이 경우 DISTINCT가 적절했을 것이다. 어느 사이트를 추천하십니까? 빠른 참조로 techonthenet을 자주 사용했습니다. – Jerry

+0

안녕하세요 Jarek, 답장을 보내 주셔서 감사합니다. 이것은 나를 위해 작동하지 않는 것 같습니다. 테스트 데이터에 더 많은 행을 포함한다고 가정 해보십시오. 3 (Id) 2003 (year) .. 나는 내 결과의 일부로 3 (id)을 좋아하지 않는다. 나는 단지 (2001 년과 2002 년과 2003 년) 이드 (들)을 원한다. – avg998877

-1

주요 문제는 찾고있는 데이터를 반환하지 않는 ID가 동일하다는 것입니다. ID가 모두 고유 한 경우 (1, 2, 3, 4) 쿼리하는 모든 행을 반환합니다. 2001, 2002 및 2003의 ID는 (1, 2, 3)이어야합니다.

1
select distinct id 
from table 
where year in(2001,2002,2003) 
+0

답장을 보내 주셔서 감사합니다! – avg998877

관련 문제