2013-04-01 153 views
0

我每天早上只要我的机器打开启动记录数据温度计第一个记录。选择与聚合函数

我想选择最小,最大和平均温度,以及温度在机器开启和关闭每天当。

我的表结构如下:

时登录,登录日期,温度通过登录来获得当天的日期聚集

I组,但我似乎无法找到一个好办法选择记录的第一个和最后一个时间戳的温度。

任何帮助?

回答

0

你想使用Windows函数是这样的:

select t.DateLogged, min(t.Temperature), max(t.Temperature), avg(t.Temperature), 
     max(case when t.seqnum_asc = 1 then t.Temperature end) as FirstTemperature, 
     max(case when t.seqnum_desc = 1 then t.Temperature end) as LastTemperature, 
from (select t.*, 
      row_number() over (partition by dateLogged order by timeLogged) as seqnum_asc, 
      row_number() over (partition by dateLogged order by timeLogged desc) as seqnum_desc 
     from t 
    ) t 
group by t.DateLogged 
order by DateLogged 

这是什么东西做的是增加了两个新的变量。从1开始的第一天(seqnum_asc)列举一天中的值。其他枚举有1 for the last reading ( seqnum_desc`)。

要得到的值,使用条件求和。

如果你喜欢,你其实可以做很多使用min()max()作为窗口fucnctions同样的事情,而不是row_number()

select t.DateLogged, min(t.Temperature), max(t.Temperature), avg(t.Temperature), 
     max(case when timeLogged = mintime then t.Temperature end) as FirstTemperature, 
     max(case when timeLogged = maxtime then t.Temperature end) as LastTemperature, 
from (select t.*, 
       min(timeLogged) over (partition by dateLogged) as minTime, 
      max(timeLogged) over (partition by dateLogged) as maxTime 
     from t 
    ) t 
group by t.DateLogged 
order by DateLogged