首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询:3个表的最高值加上行的其余部分

SQL查询:3个表的最高值加上行的其余部分
EN

Stack Overflow用户
提问于 2017-12-22 09:53:24
回答 1查看 24关注 0票数 2

目前,我一直在使用sql查询,试图找到解决方案,但现在让我头疼的是两次停留。我有三张桌子

用户表:

代码语言:javascript
复制
+-----+----------+-----------+
| pid | username |   role    |
+-----+----------+-----------+
|   1 | user1    | patient   |
|   2 | user2    | patient   |
|   3 | user3    | doc       |
|   4 | user4    | assistant |
|   5 | user5    | patient   |
+-----+----------+-----------+

基地:

代码语言:javascript
复制
+-----+---------+-------+------------+
| pid | surname | name  | birthdate  |
+-----+---------+-------+------------+
|   1 | smith   | john  | 1950-07-31 |
|   2 | jackson | sarah | 1948-08-15 |
+-----+---------+-------+------------+

医学博士:

代码语言:javascript
复制
+-----+-----+---------------+--------+--------+
| mid | pid | dateLastEntry | weight | pulse  |
+-----+-----+---------------+--------+--------+
|   1 |   1 | 2017-12-01    |     86 |     65 |
|   2 |   1 | 2017-12-02    |     84 |     70 |
|   3 |   1 | 2017-12-03    |     80 |     67 |
|   4 |   2 | 2017-11-15    |     66 |     60 |
|   5 |   2 | 2017-11-17    |     60 |     64 |
+-----+-----+---------------+--------+--------+

我试图为每个有角色病人的用户获取最大值(DateLastEntry),显示他们的pid、姓名、姓氏、体重、脉搏--即使病人没有医学数据输入:如下所示:

代码语言:javascript
复制
+-----+---------+-------+------------+--------+-------+
| pid | surname | name  | lastEntry  | weight | pulse |
+-----+---------+-------+------------+--------+-------+
|   1 | smith   | john  | 2017-12-02 | 84     | 70    |
|   2 | jackson | sarah | 2017-11-17 | 60     | 64    |
|   5 | NONE    | NONE  | NONE       | NONE   | NONE  |
+-----+---------+-------+------------+--------+-------+

Atm我的声明看起来是这样的,但无法得到正确的结果:

代码语言:javascript
复制
select b.pid, s.surname, s.name, max(m.date) as lastEntry, m.weight, m.pulse
from users b 
left join med-dat m on b.pid = m.pid
left join base-dat s on m.pid = s.pid
where b.role = 'Patient'
group by b.pid, s.surname, s.name, m.weight;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-22 10:02:04

您可以如下所示重写查询,以获得所需的输出

代码语言:javascript
复制
select b.pid, s.surname, s.name, m.dateLastEntry as lastEntry, m.weight, m.pulse
from users b 
left join med_dat m on b.pid = m.pid
left join base_dat s on m.pid = s.pid
left join med_dat m1 on m.pid = m1.pid 
                     and m.dateLastEntry < m1.dateLastEntry
where m1.pid is null
and b.role = 'Patient'

演示

从注释中编辑,使用用户表中的pid连接base_dat

代码语言:javascript
复制
select b.pid, s.surname, s.name, m.dateLastEntry as lastEntry, m.weight, m.pulse
from users b 
left join med_dat m on b.pid = m.pid
left join base_dat s on b.pid = s.pid
left join med_dat m1 on m.pid = m1.pid and m.dateLastEntry < m1.dateLastEntry
where m1.pid is null
and b.role = 'Patient'
group by b.pid, s.surname, s.name, m.weight;

演示

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

https://stackoverflow.com/questions/47939380

复制
相关文章

相似问题

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