SQL聚合密钥和获取主键

时间:2015-11-25 15:08:52

标签: sql sql-server

我希望从一个小组中获取主键。

我要找的是选择一天的所有最高和最低温度并获得该条目的主键。

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)

这将找到我每天的最高温度,但由于该组,我无法获得当天最高的那个条目的主键。 任何帮助?

2 个答案:

答案 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);