我试图列出病人和他们最近的基本保险福利。我有三张桌子,
病人(包含病人人口统计数据) 福利(包含保险福利信息) rel_pat_ben (将患者表的主键与福利表上的相应键匹配)
我几乎解决了这个问题:
选择p.patient_id,MAX(b.benefits_id),b.effective_date 从病人那里得到的 左加入rel_pat_ben作为rpb (Patient_id) 左联接福利为b ON (rpb.benefits_id=b.benfits_id和b.order=‘主“) patient_id组
使用MAX似乎可以工作,因为id字段是自动递增的,但是当我发现有较低id的记录被更新信息编辑时,我意识到了我的问题。所以,真的,我需要检查'effective_date‘字段。
是否有办法只退还每名病人一份记录,其中只包含最近的保险福利?
发布于 2013-07-05 10:23:06
如果存在,这将为每个患者选择最大effective_date:
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
)我使用的是内连接,如果对病人没有好处,它就不会被归还。
发布于 2013-07-05 10:14:11
如果你试着添加
ORDER BY b.effective_date DESC在小组的条款之后?
https://stackoverflow.com/questions/17486337
复制相似问题