Ciao a tutti, vorrei trasformare un calcolo rolling sviluppato in sql in una procedura pl/sql.
Nel dettaglio, presa una tabella composta da due campi, data e valore numerico, ottengo un terzo campo, risultato della media dei 6 giorni precedenti a quello considerato + quest'ultimo (il calcolo non lo effettuo per i primi sette giorni):
Il codice utilizzato è il seguente:codice:DAYS TOT ROLLING 01-set 9 0 03-ago 0 0 04-ago 2 0 05-ago 4 0 06-ago 5 0 07-ago 5 0 08-ago 0 4 09-ago 0 2 10-ago 3 3 11-ago 6 3 12-ago 2 3 13-ago 4 3 14-ago 0 2 15-ago 0 2 16-ago 0 2 17-ago 4 2 18-ago 4 2 19-ago 0 2 20-ago 3 2 21-ago 2 2 22-ago 2 2 23-ago 0 2 24-ago 6 2 25-ago 8 3 26-ago 4 4 27-ago 6 4 28-ago 3 4 29-ago 0 4 30-ago 0 4 31-ago 9 4
codice:SELECT tot.days, tot.ripetuti as tot, CASE WHEN ROWNUM = 7 THEN (SELECT xx FROM (SELECT ROUND (AVG (CASE WHEN ROWNUM > 0 AND ROWNUM < 8 THEN ripetuti END ), 0 ) AS xx FROM totale.tot) WHERE xx IS NOT NULL) WHEN ROWNUM = 8 THEN (SELECT xx FROM (SELECT ROUND (AVG (CASE WHEN ROWNUM > 1 AND ROWNUM < 9 THEN ripetuti END ), 0 ) AS xx FROM totale.tot) WHERE xx IS NOT NULL) WHEN ROWNUM = 9 THEN (SELECT xx FROM (SELECT ROUND (AVG (CASE WHEN ROWNUM > 2 AND ROWNUM < 10 THEN ripetuti END ), 0 ) AS xx FROM totale.tot) WHERE xx IS NOT NULL) WHEN ROWNUM = 10 THEN (SELECT xx FROM (SELECT ROUND (AVG (CASE WHEN ROWNUM > 3 AND ROWNUM < 11 THEN ripetuti END ), 0 ) AS xx FROM totale.tot) WHERE xx IS NOT NULL) WHEN ROWNUM = 11 THEN (SELECT xx FROM (SELECT ROUND (AVG (CASE WHEN ROWNUM > 4 AND ROWNUM < 12 THEN ripetuti END ), 0 ) AS xx FROM totale.tot) WHERE xx IS NOT NULL) WHEN ROWNUM = 12 THEN (SELECT xx FROM (SELECT ROUND (AVG (CASE WHEN ROWNUM > 5 AND ROWNUM < 13 THEN ripetuti END ), 0 ) AS xx

Rispondi quotando