返回最大值以及按月分组的日期+时间值

时间:2017-07-06 16:06:41

标签: sql-server datetime group-by max

使用MS-SQL 2012.有一个真正的谜题试图从大型气候数据集中检索特定数据字段。

我已将这个大的原始数据文件剥离到一个名为#max_temp的临时表,它正确地将每天的最大值及其发生的时间和日/月值拉回来进行参考:

monthid month   day time    current_temp
1       12     24   12:45   9.1
1       12     25   12:25   8.3
1       12     26   23:55   8.6
1       12     27   00:00   8.6
1       12     28   13:15   5.9
1       12     29   12:50   5
1       12     30   13:32   6.3
1       12     31   12:49   6.9
2        1      1   23:59   12
2        1      2   01:12   12.7
2        1      3   03:55   6.2

我想要检索的是按monthID分组的输出,因此返回:

monthid     month   day time    current_temp
    1       12      24  12:45   9.1
    2       1       9   20:04   15.1  <<*not shown in above sample*>>

通过查看其他类似的问题,我尝试了以下代码,但没有找到最终解决方案或查询失败。

select * 
from (select t.*, ROW_NUMBER () over (partition by t.monthid, t.time order by t.current_temp desc) as rn
from #max_temp t) x
where rn=1
order by monthid asc

select monthid, day, time, current_temp 
from #max_temp
where current_temp= (select max(current_temp) from #max_temp group by MonthID, day, time)

先谢谢你的帮助, 埃利奥特。

1 个答案:

答案 0 :(得分:3)

t.time移除partition by,如下所示:

select * 
from (
  select t.*, ROW_NUMBER () over (partition by t.monthid order by t.current_temp desc) as rn
  from #max_temp t
  ) x
where rn=1
order by monthid asc

在分区中timecurrent_tempmonthid提供time的最大价值,但因为您只想要最好的current_temp对于每个monthid,请从该表达式中删除time