2016-03-31 26 views
0

Saatlik kayıtların bulunduğu bir tabloya sahip olduğum ve değişiklikle ilgili verileri sıkıştırmak için bir sorgu oluşturmamız gereken bir sorunla karşılaşıyorum.Saatlik verileri değişime göre sıkıştırmak için sorgu

Örnek Veri -

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 

Beklenen Sonuçları - Herhangi bir yardım çok takdir edilir

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 

.

Teşekkürler ve Saygılar

cevap

0

Sıralaması fonksiyon size yardımcı olabilir.

SampleData varsayarsak - bir tablo olan verilere sahip olup,

Bu yavaş olabilir,

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 

Önceki seçilir ve Saat içi, mevcut saat değeri, önceki saat farklı olduğunda, daha sonra geçerli saati kaydedin.

İlgili konular