0

このクエリがあります

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

ここにいくつかの結果があります

患者 ID 診療 ID 訪問回数
157053 30976 6
158463 30974 2
187772 30973 15
187797 30971 1
187797 30975 1

最後の 2 つの患者 ID は同じであり、訪問回数も同じであるため、ランクも同じであることに注意してください。これらのランクが等しいレコードを出力から完全に除外するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

3

それらを数えてwhere句に含めることで、それらを削除できます。次のクエリは、ランクと同様のロジック (患者が同じ訪問回数を持つ回数) を使用してそれらをカウントします。

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

最後の 2 つのレコードで practiceid が異なることに気付きました。ただし、まだ両方を排除したいようです。

于 2012-12-03T22:05:31.533 に答える