我有一個是對人員和他們是否曾經有過一組dxcodes的存在顯示大量信息的查詢。每一列是用於在同一個表中的另一組dxcodes的不同檢查:SQL服務器:左外連接,並返回Y或N,如果存在一個值
示例輸出:
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碼存在
我的查詢工作,但我不認爲這是有效率,因爲它可以。我真的不需要任何東西,但它的工作。在此之前,我使用了精選不同的人員,但意識到需要進行多少後處理,並且查詢性能已經顯着提高。對於最佳實踐,我認爲使用max返回僅一個結果的額外計算仍然是不必要的計算。
我嘗試使用的變化存在,左連接,頂部11和case語句做同樣的事情,但我只是沒有正確執行代碼。
謝謝。我知道這應該是一個簡單的答案。我一直在尋找的術語並沒有得到我期待的答案。
尼斯Q - 從我所看到的,'MAX()'似在查詢計劃將被忽略,以便嵌套選擇是一樣的'選擇pdx.pid .. GROUP BY pdx.pid'。我不是100%確定的,但是我會想象SQL一旦發現至少有一次該人的診斷就停止評估。 – StuartLC