2014-12-17 2 views
1

가장 친한 친구,별개 결과에 대한 SQL 쿼리 최근순에 의한 쿼리

약간의 날짜 범위별로 고유 한 클라이언트 목록을 몇 개 가져와야 할 필요가 있으며 100 % 확실하지 않습니다. 그것에 대해 어떻게 가야하는지.

목록 1 :
내가 가장 최근의 EditDate 오늘과 이상과 같은 5 세되는과 (ClientNum) 구분해야합니다.

목록 2 :
내가 4 살 오늘 5 년 사이 가장 최근 EditDate 된 오늘 (ClientNum) 구분해야합니다.

목록 3 :
내가 3 세 오늘 4 세 사이의 가장 최근의 EditDate 된 오늘 (ClientNum) 구분해야합니다.

이제 다음과 같은 결과를 얻었고, 내가 얻고 있어야한다고 생각하는 것을 얻는 지 알 수 없습니다.

목록 1 조회 :

SELECT DISTINCT(ClientNum) 
FROM Table 
WHERE EditDate < DATEADD(year,-5,GETDATE()) 

목록이 검색어 :

SELECT DISTINCT(ClientNum) 
FROM Table 
WHERE EditDate BETWEEN DATEADD(year,-5,GETDATE()) AND DATEADD(year,-4,GETDATE()) 

목록이 조회 :

SELECT DISTINCT(ClientNum) 
FROM Table 
WHERE EditDate BETWEEN DATEADD(year,-4,GETDATE()) AND DATEADD(year,-3,GETDATE()) 

이가요 이것에 대해 올바른 방법? 또는 나는 무엇인가 놓치고 있냐?

알려 주시기 바랍니다.

-Nick

+1

DISTINCT NOT 함수이다. 선택한 모든 열에서 작동합니다. (column)은 column뿐입니다 ... GROUP BY와 집계 함수 MAX를 합쳐보세요. – jarlh

+0

동일한 WHERE 절을 사용하여 max (editDate), min (EditDate)를 선택하여 확인할 수 있습니다. ... DISTINCT 주변의()를 건너 뜁니다. – idstam

답변

2

리스트 1 개

SELECT ClientNum, max(EditDate) as maxEditDate 
FROM Table 
GROUP BY ClientNum 
HAVING maxEditDate < DATEADD(year,-5,GETDATE()); 

목록 2

SELECT ClientNum, max(EditDate) as maxEditDate 
FROM Table 
GROUP BY ClientNum 
HAVING maxEditDate BETWEEN DATEADD(year,-5,GETDATE()) AND DATEADD(year,-4,GETDATE()); 

목록 3

SELECT ClientNum, max(EditDate) as maxEditDate 
FROM Table 
GROUP BY ClientNum 
HAVING maxEditDate BETWEEN DATEADD(year,-4,GETDATE()) AND DATEADD(year,-3,GETDATE()); 
+0

이 작동하지 않습니다. WHERE 절에는 별칭을 사용할 수 없습니다. –

+0

괜찮습니다. 알아 차릴 수있는 점 btw :-) – Gabriel

+0

이것은 나를 위해 일했다. @ 가브리엘과 다른 모든 사람들에게 감사드립니다. – NCollinsTE

관련 문제