我有一個複雜的查詢,我需要弄清楚,但我在編寫查詢和子查詢方面不夠精通。SQL查詢:如何選擇記錄,但是如果存在父記錄,請選擇它的最新子項
問題:我需要檢索唯一的病人記錄,但如果記錄有一個非空master_patient_id,我需要子查詢或加入對master_patient表,查詢最近的(created_at DESC LIMIT 1)兒童患者該master_patient。
原因是我們的系統將爲同一患者創建一個新的患者記錄,如果他們被重新接收到同一個設施。在創建給定患者的第二條記錄時,我們還創建了一個master_patient記錄,以將兩個患者記錄與它關聯,以便系統可以知道他們是同一患者。
現在,我需要顯示非重複患者的列表。所以我需要有一個能夠從患者記錄中獲取患者的查詢,但需要查詢master_patient表並只檢索與其master_patient關聯的最新患者。
耐心表具有:ID,名稱master_patient_id 和患者belongs_to的master_patient但是存在不是必需的。
主患者表中只有一個id和has_many患者。
期望的結果:應該是唯一的病歷,但發現如果患者本身中是獨一無二的唯一方法是查詢master_patient表,看是否有患者belong_to它,然後只檢索最新的患者(兒master_patient)。
我不能根據master_patient查詢我的查詢,因爲那些只有1條記錄的患者不存在。我應該使用某種類型的連接或子查詢嗎?
更新:感謝@τεκ我能夠調整自己的查詢中Postgres的工作:
更新2: 1更微小的調整來查詢,以使其更短,糾正空ID爲返回:
SELECT MAX(patients.id) as id, *
FROM "patients"
JOIN (
SELECT MAX(created_at) AS created_at,
patient_master_id,
COALESCE(patient_master_id, id) pm_id
FROM patients
GROUP BY patient_master_id,
COALESCE(patient_master_id, id)
) s
ON (s.pm_id = patients.id or s.patient_master_id = patients.patient_master_id)
AND s.created_at = patients.created_at
GROUP BY patients.id, s.created_at, s.patient_master_id, s.pm_id
這看起來像是有效的。我現在正在運行一些測試。我會盡快回復。謝謝! – DiegoSalazar 2014-10-30 17:48:58