2

私はこのシナリオを持っています:

entry_time (日時) と値 (float) を持つ 1 つのテーブル。同じまたは異なる値を使用して、異なる間隔でタイムスタンプを取得します。このような:

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 

私が必要とするのは、最初の日付から次の値まで(同じであっても)最初の値を繰り返すことです。1 日に複数の値がある場合は、最大値が選択されます。最初の繰り返しの後、2 番目の日付に達すると、プロセスは 2 番目の値で 3 番目の日付まで繰り返されます。

このようなもの:

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
.............................

回答ありがとうございます。

ドラゴス。

4

1 に答える 1

4

SQLFiddle デモ

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
于 2013-04-19T10:41:16.393 に答える