2

我正在尝试列出患者及其最近的主要保险福利。我涉及三张桌子,

患者(包含患者人口统计数据)
福利(包含保险福利信息)
rel_pat_ben(将患者表的主键与福利表上的相应键匹配)

我几乎解决了这个问题:

SELECT p.patient_id, MAX(b.benefits_id), b.effective_date
FROM patients AS p
LEFT JOIN rel_pat_ben AS rpb USING(patient_id)
LEFT JOIN benefits AS b ON (rpb.benefits_id=b.benfits_id AND b.order='primary' )
按患者 ID 分组

使用 MAX 似乎可以工作,因为 id 字段是自动递增的,但是当我发现使用更新信息编辑具有较低 id 的记录的情况时,我意识到了我的问题。所以真的,我需要检查“有效日期”字段。

有没有办法只为每位患者返回一个仅包含最近保险福利的记录?

4

2 回答 2

0

如果您尝试添加怎么办

ORDER BY b.effective_date DESC

在 GROUP BY 子句之后?

于 2013-07-05T10:14:11.523 回答
0

这将为每个患者选择最大有效日期(如果存在):

SELECT p.patient_id, MAX(b.effective_date)
FROM
  patients AS p INNER JOIN rel_pat_ben AS rpb USING(patient_id)
  INNER JOIN benefits AS b ON (rpb.benefits_id=b.benfits_id AND b.order='primary')
GROUP BY
  p.patient_id

这将为每位患者选择最后的福利:

SELECT p.patient_id, b.*
FROM
  patients AS p INNER JOIN rel_pat_ben AS rpb USING(patient_id)
  INNER JOIN benefits AS b ON (rpb.benefits_id=b.benfits_id AND b.order='primary')
WHERE
  (p.patient_id, b.effective_date) IN (
    SELECT p.patient_id, MAX(b.effective_date)
    FROM
      patients AS p INNER JOIN rel_pat_ben AS rpb USING(patient_id)
      INNER JOIN benefits AS b ON (rpb.benefits_id=b.benfits_id AND b.order='primary')
    GROUP BY
      p.patient_id
  )

我正在使用 INNER JOINS,因此如果对患者没有任何好处,则不会退还。

于 2013-07-05T10:23:06.533 回答