2016-03-31 13 views
0

毎時何百万というレコードを持つテーブルがあり、変更時にデータを圧縮するためのクエリを作成する必要があるという問題に直面しています。変更時に時間単位のデータを圧縮するクエリ

サンプルデータ -

Start DateTime  End DateTime  Value 

2015-09-13 6:00  2015-09-13 7:00  45 

2015-09-13 7:00  2015-09-13 8:00  45 

2015-09-13 8:00  2015-09-13 9:00  45 

2015-09-13 9:00  2015-09-13 10:00 45 

2015-09-13 10:00 2015-09-13 11:00 45 

2015-09-13 11:00 2015-09-13 12:00 45 

2015-09-13 12:00 2015-09-13 13:00 25 

2015-09-13 13:00 2015-09-13 14:00 25 

2015-09-13 14:00 2015-09-13 15:00 25 

2015-09-13 15:00 2015-09-13 16:00 45 

2015-09-13 16:00 2015-09-13 17:00 45 

2015-09-13 17:00 2015-09-13 18:00 45 

2015-09-13 18:00 2015-09-13 19:00 45 

期待される成果 -

Start DateTime  End DateTime  Value 

2015-09-13 6:00  2015-09-13 12:00 45 

2015-09-13 12:00 2015-09-13 15:00 25 

2015-09-13 15:00 2015-09-13 19:00 45 

すべてのヘルプははるかに高く評価されます。

ありがとうございます。

答えて

0

ランキング機能が役立ちます。

WITH HourlyData AS (
SELECT RANK() OVER (ORDER BY StartDate) AS RankId 
    , StartDate, EndDate, Value 
FROM SampleDate), 

DateHourChanged AS (
SELECT DENSE_RANK() OVER (ORDER BY (CASE WHEN A.Value <> B.value THEN 1 ELSE A.RankId END)) AS ID 
, A.StartDate, A.EndDate, A.Value 
FROM HourlyData AS A 
LEFT JOIN HourlyData AS B 
ON A.RankId -1 = B.RankId 
) 

SELECT StartDate, EndDate, Value 
FROM DateHourChanged 
WHERE Id = 1 
ORDER BY 1 

、これは遅くなることがあり、

それらのデータを有するテーブルであり、私は、現在の時間の値が前の時間と異なる場合には、過去と現在の時間選択 - SampleDataがあると仮定すると

現在の時間を記録します。

関連する問題