SQL : GROUP 和 MAX 多列

Posted

技术标签:

【中文标题】SQL : GROUP 和 MAX 多列【英文标题】:SQL : GROUP and MAX multiple columns 【发布时间】:2021-02-02 18:36:52 【问题描述】:

我是 SQL 初学者,谁能帮我解决一下 SQL 查询问题?

我的桌子如下所示

PatientID   Date        Time    Temperature
1           1/10/2020   9:15    36.2
1           1/10/2020   20:00   36.5
1           2/10/2020   8:15    36.1
1           2/10/2020   18:20   36.3
2           1/10/2020   9:15    36.7
2           1/10/2020   20:00   37.5
2           2/10/2020   8:15    37.1
2           2/10/2020   18:20   37.6
3           1/10/2020   8:15    36.2
3           2/10/2020   18:20   36.3

如何获取每位患者每天的最高体温:

PatientID   Date        Temperature
1           1/10/2020   36.5
1           2/10/2020   36.3
2           1/10/2020   37.5
2           2/10/2020   37.6

提前致谢!

【问题讨论】:

请用您正在运行的数据库标记您的问题:mysql、oracle、sqlserver...? 您是否真的将数据和时间存储在两个单独的列中? 【参考方案1】:

对于这个数据集,简单的聚合似乎就足够了:

select patientid, date, max(temperature) temperature
from mytable
group by patientid, date

另一方面,如果您要在具有最高日温度的行上显示其他列,则情况不同。你需要一些过滤;一种选择使用窗口函数:

select *
from (
    select t.*, 
        rank() over(partition by patientid, date order by temperature desc)
    from mytable t
) t
where rn = 1

【讨论】:

以上是关于SQL : GROUP 和 MAX 多列的主要内容,如果未能解决你的问题,请参考以下文章

多列的SQL MAX?

sql MAX列多列

SQL中如何取多列的最大值?

MYSQL 行转列列转行多列转一行一行转多列

SQL 多行多列数据清洗合并为一行

SQL Server将一列拆分成多列