2016-03-31 21 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

排名功能可能會幫助你。

假設SampleData - 由具有那些數據的表,

這可能是緩慢的,

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 

我選擇先前和當前小時,當電流小時的值從以前的小時不同,然後記錄當前小時。