Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Media mobile/Media mobile

Ecco il SQL Fiddle che dimostra la seguente query:

WITH TempS as 
(
  SELECT s.SNo, s.value, 
  ROW_NUMBER() OVER (ORDER BY s.SNo) AS RowNumber
  FROM MyTable AS s
)
SELECT m.SNo, m.value,
(
  SELECT SUM(s.value) 
  FROM TempS AS s
  WHERE RowNumber >= m.RowNumber
  AND RowNumber <= m.RowNumber + 2
) AS Sum3InRow
FROM TempS AS m

Nella tua domanda stavi chiedendo di sommare 3 valori consecutivi. Hai modificato la tua domanda dicendo che il numero di record consecutivi che devi sommare potrebbe cambiare. Nella query precedente devi semplicemente cambiare il m.RowNumber + 2 a tutto ciò di cui hai bisogno.

Quindi, se hai bisogno di 60, usa

m.RowNumber + 59

Come puoi vedere è molto flessibile poiché devi cambiare solo un numero.