2013-10-03 2 views
0

나는 다음과 같은 테이블을 감안할 때 :계수 반복 레지스터는

Id, Date, Data Identifier, Info 
1, 2013-01-01, 'XSWQ', '#1' 
2, 2013-01-02, 'ADWS', '#1' 
3, 2013-01-02, 'ADWS', '#2' 
4, 2013-01-02, 'QKVJ', '#1' 
5, 2013-01-03, 'XSWQ', '#1' 
6, 2013-01-03, 'ADWS', '#1' 
7, 2013-01-04, 'QKVJ', '#1' 
8, 2013-01-04, 'VSAQ', '#1' 
9, 2013-01-04, 'VSAQ', '#2' 

어떻게 (독특하고 간단한 SQL로 반복 레지스터 (다른 날짜에 동일한 데이터 식별자)를 계산 할 수 있습니다 제한된 기간 동안 모든 하위 레코드를 비교하지만 모든 시간의 레코드를 비교할 수 있습니까?

예를 들어, 전체 테이블을 고려하여 2013-01-02와 2013-01-04 사이에 나타나는 중복 레코드를 계산하고 싶습니다. 'VSAQ'는 반복되는 것으로 간주되어서는 안되지만 'XSWQ'는 중복 기록으로 간주되어야합니다 (첫 번째 표시는 명시된 기간을 벗어납니다).

이 결과는

이 독특하고 간단한 쿼리로 가능 3 (XSWQ, ADWS, QKVJ)인가?

답변

0
SELECT DISTINCT tbl.Identifier 
FROM tbl 
LEFT JOIN tbl AS everything 
ON tbl.Identifier = everything.Identifier 
    AND tbl.Id <> everything.Identifier 
WHERE tbl.Date BETWEEN '2013-01-02' AND '2013-01-04' 
    AND everything.id IS NOT NULL 
ORDER BY tbl.Identifier 

하지만 왜 반 부업입니까? 하위 쿼리가 더 빠를 수도 있습니다. http://sqlfiddle.com/#!2/19fb3/5

+0

단일 쿼리로 처리 할 수 ​​있는지 여부를 확인하는 데 문제가 없습니다. 이 쿼리는 하루에 두 번 이상 나타나는 레코드를 찾습니다. 제 경우에는이 줄들을 반복해서 생각할 수 없습니다. –

+0

이 쿼리가 효과가 있습니까? – AgRizzo

+0

@ArgRizzo가 작동하지 않습니다 ... –