2012-12-03 4 views
0

을 무시 나는 여기에이 쿼리를RANK() OVER 동일 계급

SELECT 
patientid, 
practiceid, 
visitcount 
    FROM 
    (  
     SELECT 
      patientid, 
      practiceid , 
      visitcount, 
      RANK() OVER (PARTITION BY patientid ORDER BY visitcount DESC) as Rank 
     FROM 
      aco.patients_practices 
    WHERE practiceid in (select id from aco.practices where parentaco = 30982) and isprimary = 0 
    ) AS A 
WHERE 
    Rank = 1 

 
patientid  practiceid  visitcount 
157053   30976   6 
158463   30974   2 
187772   30973   15 
187797   30971   1 
187797   30975   1 

공지 사항 지난 2 patientid의의 일부 결과는 동일하며, 따라서 같은 visitcount 같은 순위를 가지고있다. 출력에서 완전히 동일한 순위로 이러한 레코드를 생략 할 수 있습니까?

감사합니다.

+1

하위 쿼리의 결과는 무엇입니까? 그것에'계급'이 포함되어 있습니다. – Taryn

답변

3

숫자를 계산하여이를 where 절에 포함하면 제거 할 수 있습니다. 다음 쿼리는 순위와 비슷한 논리를 사용하여 계산 - 횟수는 환자가 같은 visitcount 있습니다

SELECT patientid, practiceid, visitcount 
FROM (SELECT patientid, practiceid, visitcount, 
      RANK() OVER (PARTITION BY patientid ORDER BY visitcount DESC) as Rank, 
      COUNT(*) over (PARTITION by patientid, visitcount) as RankCount 
     FROM aco.patients_practices 
     WHERE practiceid in (select id from aco.practices where parentaco = 30982) and isprimary = 0 
    ) A 
WHERE Rank = 1 and RankCount = 1 

나는 practiceid 지난 2 개 기록에 차이가 있음을 고지해야합니다. 그래도 둘 다 제거하려는 것 같습니다.

+0

그게 티켓이야! 고맙습니다! 그리고 그래, 나는 여전히 다른 practiceid 경우에도 그들이 사라 싶었어. – dbinott