【发布时间】:2014-08-28 14:28:53
【问题描述】:
假设一位患者多次就诊。我想编写一个查询,根据他们最早的访问返回不同的患者行。例如,考虑以下行。
patients
-------------
id name
1 Bob
2 Jim
3 Mary
visits
-------------
id patient_id visit_date reference_number
1 1 6/29/14 09f3be26
2 1 7/8/14 34c23a9e
3 2 7/10/14 448dd90a
我想看到查询返回的是:
id name first_visit_date reference_number
1 Bob 6/29/14 09f3be26
2 Jim 7/10/14 448dd90a
我尝试过的类似于:
SELECT
patients.id,
patients.name,
visits.visit_date AS first_visit_date,
visits.reference_number
FROM
patients
INNER JOIN (
SELECT
*
FROM
visits
ORDER BY
visit_date
LIMIT
1
) visits ON
visits.patient_id = patients.id
添加 LIMIT 会使查询返回 0 行,但删除它会导致查询返回重复项。这里有什么诀窍?我也尝试在 INNER JOIN 中选择 MIN(visit_date) 但这也返回了重复。
更新
有人建议这个问题是重复的,但对我来说它似乎不同,因为我是在两个单独的表上做这个的。另一个问题的公认答案建议加入y.max_total = x.total,如果要加入的表是从中选择的同一个表,则该方法有效。此外,我需要从具有 MIN 日期的行中返回其他列,而不仅仅是日期本身。
不过,我接受的答案效果很好。
【问题讨论】:
标签: sql postgresql one-to-many greatest-n-per-group