[英]Select column of the Max(value)
我有这些桌子
记录:
+----+-------------+--------------+-------------------------+---------+
| Id | IdHealtcare | ValueMonitor | DateMonitor | Checked |
+----+-------------+--------------+-------------------------+---------+
| 1 | 1 | 80 | 2020-05-14 19:40:11.873 | NULL |
| 2 | 2 | 66 | 2020-05-14 20:56:33.360 | NULL |
| 3 | 1 | 100 | 2020-05-14 20:32:24.397 | NULL |
| 4 | 3 | 87 | 2020-05-14 20:57:12.390 | NULL |
+----+-------------+--------------+-------------------------+---------+
卫生保健:
+----+-----------+----------+--------+------------+
| Id | IdPatient | IdDoctor | IdType | RangeValue |
+----+-----------+----------+--------+------------+
| 1 | 1 | 1 | 1 | 0-180 |
| 2 | 1 | 1 | 2 | 50-200 |
| 3 | 2 | 2 | 1 | 90-180 |
+----+-----------+----------+--------+------------+
我想为每种患者的医疗保健类型 select 提供患者的 ID 和最近的日期值。
我已经尝试过这些查询:
select p.CodiceFiscale, p.Surname, p.Name, t.Name, Max(r.DateMonitor),
r.ValueMonitor
from dbo.Patients as p
inner join dbo.HealtcareMonitoring as m on m.IdPatient = p.Id
inner join dbo.Records as r on r.IdHealtcare = m.Id
inner join dbo.MonitoringTypes as t on t.Id = m.IdType
where m.IdDoctor = 1
group by t.Name, p.CodiceFiscale, p.Surname, p.Name
SELECT m.IdPatient, m.IdType, MAX(r.DateMonitor), r.ValueMonitor AS LastDate
FROM dbo.Records as r
inner join dbo.HealtcareMonitoring as m on m.Id = r.IdHealtcare
where m.IdDoctor = 1
GROUP BY m.IdPatient, m.IdType
但我不能 select 该值,因为它不包含在聚合 function 或“分组依据”子句中。
我该如何解决? 有没有更好的方法来解决这个问题?
你为什么不在group by
中添加r.ValueMonitor
? 它应该修复该错误
SELECT m.IdPatient, m.IdType, MAX(r.DateMonitor), r.ValueMonitor AS LastDate
FROM dbo.Records as r inner join dbo.HealtcareMonitoring as m
on m.Id = r.IdHealtcare
where m.IdDoctor = 1
GROUP BY m.IdPatient, m.IdType, r.ValueMonitor
一种解决方案可以按非聚合列分组
select p.CodiceFiscale, p.Surname, p.Name, t.Name, Max(r.DateMonitor), r.ValueMonitor from dbo.Patients as p
inner join dbo.HealtcareMonitoring as m
on m.IdPatient = p.Id
inner join dbo.Records as r
on r.IdHealtcare = m.Id
inner join dbo.MonitoringTypes as t
on t.Id = m.IdType
where m.IdDoctor = 1 group by t.Name, p.CodiceFiscale, p.Surname, p.Name
group by p.CodiceFiscale, p.Surname, p.Name, t.Name, r.ValueMonitor
另一种解决方案可能是使用子查询,但性能更差
select p.CodiceFiscale, p.Surname, p.Name, t.Name,
(select MAX(DateMonitor) from dbo.Records where IdHealtcare = m.Id)
, r.ValueMonitor from dbo.Patients as p
inner join dbo.HealtcareMonitoring as m
on m.IdPatient = p.Id
inner join dbo.MonitoringTypes as t
on t.Id = m.IdType
where m.IdDoctor = 1 group by t.Name, p.CodiceFiscale, p.Surname, p.Name
更多关于加入与子查询的性能在这里SQL 加入与 SQL 子查询(性能)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.