我希望从一个小组中获取主键。
我要找的是选择一天的所有最高和最低温度并获得该条目的主键。
select Cast(DateTime as date) AS 'Date', MAX(Temperature) AS 'Max Temperature'
from [Testing].[dbo].[Reading]
GROUP by Cast(DateTime as date)
ORDER by Cast(DateTime as date)
这将找到我每天的最高温度,但由于该组,我无法获得当天最高的那个条目的主键。 任何帮助?
答案 0 :(得分:0)
一种方法是使用窗口函数和条件聚合:
select Cast(DateTime as date) AS [Date], MAX(Temperature) AS MaxTemperature,
max(case when seqnum = 1 then temperature end) as LastTemperature
from (select r.*,
row_number() over (partition by Cast(DateTime as date)
order by DateTime desc) as seqnum
from [Testing].[dbo].[Reading] r
) r
group by Cast(DateTime as date)
order by Cast(DateTime as date);
编辑:
如果您想要具有最高温度的行中的其他值,那么您将使用:
select Cast(DateTime as date) AS [Date], MAX(Temperature) AS MaxTemperature,
max(case when seqnum_max = 1 then <whatever column here> end) as <whatever column>
from (select r.*,
row_number() over (partition by Cast(DateTime as date)
order by Temperature desc) as seqnum_max
from [Testing].[dbo].[Reading] r
) r
group by Cast(DateTime as date)
order by Cast(DateTime as date);
您将使用另一个变量作为最小值。
答案 1 :(得分:0)
基于@Gordon回答:
select Cast(DateTime as date) AS [Date], Temperature AS MaxTemperature, id_temperature
from (select r.*,
row_number() over (partition by Cast(DateTime as date)
order by DateTime desc, Temperature desc) as seqnum
from [Testing].[dbo].[Reading] r
) r
order by Cast(DateTime as date);