首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MYSQL中的多个表中选择MAX

在MYSQL中的多个表中选择MAX
EN

Stack Overflow用户
提问于 2013-07-05 10:11:39
回答 2查看 152关注 0票数 2

我试图列出病人和他们最近的基本保险福利。我有三张桌子,

病人(包含病人人口统计数据) 福利(包含保险福利信息) 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‘字段。

是否有办法只退还每名病人一份记录,其中只包含最近的保险福利?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-05 10:23:06

如果存在,这将为每个患者选择最大effective_date:

代码语言:javascript
复制
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

这将为每个病人选择最后的福利:

代码语言:javascript
复制
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
  )

我使用的是内连接,如果对病人没有好处,它就不会被归还。

票数 0
EN

Stack Overflow用户

发布于 2013-07-05 10:14:11

如果你试着添加

代码语言:javascript
复制
ORDER BY b.effective_date DESC

在小组的条款之后?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17486337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档