T-SQL;从表中按天重复一个时间段的值

时间:2013-04-19 10:15:55

标签: sql tsql

我有这种情况:

一个带有entry_time(datetime)和值(float)的表。我以不同的时间间隔使用相同或不同的值来检索时间戳。像这样:

date_time   value
2012-12-08  77252,8046875
2012-12-08  77252,8046875
2012-12-22  77413,2734375
2012-12-24  0
2012-12-24  0
2012-12-24  0
2012-12-24  0
2012-12-24  68549,4453125
2012-12-24  0
2012-12-24  79194,703125
2012-12-26  0
2012-12-26  77252,8046875
2013-01-05  0
2013-01-05  0
2013-01-26  63780
2013-02-08  10362,27734375
2013-02-16  0
2013-03-04  76400
2013-03-20  0
2013-03-20  76400 

我需要的是从第一个日期到第一个日期重复第一个值,直到下一个值(即使它是相同的)。当每天有多个值时,要选择最大值。在第一次重复之后,当它到达第二个日期时,该过程重复第二个值,直到第三个日期,依此类推。

这样的事情:

date_time   value
2012-12-22  77413,2734375
2012-12-23  77413,2734375
2012-12-24  79194,703125
2012-12-25  79194,703125
2012-12-26  77252,8046875
2012-12-27  77252,8046875
2012-12-28  77252,8046875
.............................
2013-01-05  0
2013-01-06  0
.............................
2013-01-25  0
2013-01-26  63780
.............................

提前感谢您的回答!

德拉戈什。

1 个答案:

答案 0 :(得分:4)

SQLFiddle demo

with t_max_min 
as 
(select min(date_time) min_dt, 
        max(date_time) max_dt  
        from t)

, period as
(
   select min_dt dt from t_max_min
   union all
   select dt+1 from period 
      where dt<(select max_dt from t_max_min)

)
,t_values as
(
  select date_time, max(value) value 
      from t group by date_time
)

select dt as date_time,
       ISNULL((select TOP 1 value 
                     from t_values
                     where date_time<=dt

                     order by date_time desc)
              , 0) value
    from period
order by dt