2016-03-31 9 views
0

Ich stehe vor einem Problem, wo ich eine Tabelle mit Millionen von Stundensätzen habe und eine Abfrage erstellen muss, um die Daten bei Änderung zu komprimieren.Abfrage, um stündliche Daten zu einer Änderung zu komprimieren

Beispieldaten -

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 

Erwartete Ergebnisse -

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 

Jede Hilfe sehr geschätzt wird.

Dank und Grüße

Antwort

0

Ranking-Funktion kann Ihnen helfen.

Unter der Annahme, dass SampleData - ist eine Tabelle, diese Daten mit,

Diese langsam sein kann,

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 

wähle ich zurück und aktuelle Stunde, wenn der Wert der aktuellen Stunde der letzten Stunde abweichen, Notiere dann die aktuelle Stunde.

Verwandte Themen