我有2张桌子
患者:p_id,姓名,年龄和医疗记录:id,p_id,日期
我需要从“患者”中选择所有内容,以及他们最新的“医疗记录”的日期。理想的结果将是
编号 | 名称 | 年龄 | 日期(最新) |
---|---|---|---|
1个 | 约翰 | 20 | 2020/12/20 |
2 | 英雄 | 18 | 2020/12/18 |
我目前停留在
SELECT *
FROM Patient
JOIN (SELECT
MedicalRecord.p_id,
MedicalRecord.date
FROM MedicalRecord) x ON Patient.p_id = x.p_id
这将为我提供以下结果,但是我只需要向每位患者显示一次他们的MedicalHistory的最新日期。
编号 | 名称 | 年龄 | p_id | 日期(最新) |
---|---|---|---|---|
1个 | 约翰 | 20 | 1个 | 2020/12/20 |
1个 | 约翰 | 20 | 1个 | 2020/12/15 |
2 | 英雄 | 18 | 2 | 2020/12/18 |
谢谢。
传统的方法是使用联接:
SELECT p.*, mr.*
FROM Patient p
LEFT JOIN
(
SELECT mr1.*
FROM MedicalRecord mr1
INNER JOIN
(
SELECT p_id, MAX(date) AS max_date
FROM MedicalRecord
GROUP BY p_id
) mr2
ON mr2.p_id = mr1.p_id AND
mr2.max_date = mr1.date
) mr
ON mr.p_id = p.id
借助解析功能,我们可以ROW_NUMBER
在此处使用一些简洁的代码:
WITH cte AS (
SELECT p.*, mr.*, ROW_NUMBER() OVER (PARTITION BY p.id ORDER BY mr.date DESC) rn
FROM Patient p
LEFT JOIN MedicalRecord mr ON mr.p_id = p.id
)
SELECT *
FROM cte
WHERE rn = 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句