Ho la seguente tabella:ricorsivo CTE - consolidare inizio e di fine
row_num customer_status effective_from_datetime
------- ------------------ -----------------------
1 Active 2011-01-01
2 Active 2011-01-02
3 Active 2011-01-03
4 Suspended 2011-01-04
5 Suspended 2011-01-05
6 Active 2011-01-06
e sto cercando di ottenere il seguente risultato cui righe consecutive con lo stesso stato sono fusi in una riga con un efficace da e per Periodo:
customer_status effective_from_datetime effective_to_datetime
--------------- ----------------------- ---------------------
Active 2011-01-01 2011-01-04
Suspended 2011-01-04 2011-01-06
Active 2011-01-06 NULL
posso ottenere un CTE ricorsiva di uscita effective_to_datetime corretta in base riga successiva, ma sto avendo difficoltà fusione delle gamme.
codice per generare dati di esempio:
CREATE TABLE #temp
(
row_num INT IDENTITY(1,1),
customer_status VARCHAR(10),
effective_from_datetime DATE
)
INSERT INTO #temp
VALUES
('Active','2011-01-01')
,('Active','2011-01-02')
,('Active','2011-01-03')
,('Suspended','2011-01-04')
,('Suspended','2011-01-05')
,('Active','2011-01-06')
Oh, e non voglio usare un cursore o un ciclo perché il piano è di usare questa logica in una vista. – shakedown7
Cosa succede se non si dispone di una voce per una data? Dovrebbe essere considerato come una lacuna nella sequenza? per esempio. supponiamo che la riga '('Active', '2011-01-02')' non fosse presente? –