個人に関する一連の情報と、dxcodes のグループが存在したことがあるかどうかを表示するクエリがあります。各列は、同じテーブル内の別のグループの dxcode に対する異なるチェックです。
出力例:
pid . . . .HTN . . .DM
123 . . . Y . . . . .N
456 . . . N . . . . .N
クエリ:
select
p.pid
,CASE WHEN HTN.pid is not null THEN 'Y' ELSE 'N' END AS HTN
,... (other case statements)
from p
left outer join (
SELECT dx.pid, max(create_timestamp) as maxdate
FROM pdx
WHERE pdx.dxcode IN ('401','401.0','401.1','401.9')
group by dx.pid
) as HTN on p.pid = HTN.pid
...同じ pdx テーブルで他の結合を行い、他の dx コードの存在を照会します
私のクエリは機能しますが、可能な限り効率的ではないと思います。maxdate は本当に必要ありませんが、うまくいきました。これより前は、個別の人物を選択して使用していましたが、後処理がどれだけ必要かを認識し、クエリのパフォーマンスはすでに劇的に向上しています。ベスト プラクティスとして、max を使用して 1 つの結果のみを返す追加の計算は、依然として不必要な計算だと思います。
私は同じことをするためにexists、left joins、top 1 1、およびcaseステートメントのバリエーションを使用しようとしましたが、コードを適切に実行していません.
ありがとう。これは簡単な答えでなければならないことはわかっています。私が探していた用語は、私が望んでいた答えをもたらしませんでした.