Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gleitender Durchschnitt / Rollierender Durchschnitt

Hier ist die SQL-Fiddle das zeigt die folgende Abfrage:

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

In Ihrer Frage wollten Sie 3 aufeinanderfolgende Werte summieren. Sie haben Ihre Frage so geändert, dass sich die Anzahl der aufeinanderfolgenden Datensätze, die Sie summieren müssen, ändern könnte. In der obigen Abfrage müssen Sie einfach m.RowNumber + 2 ändern was auch immer Sie brauchen.

Wenn Sie also 60 brauchen, dann verwenden Sie

m.RowNumber + 59

Wie Sie sehen, ist es sehr flexibel, da Sie nur eine Nummer ändern müssen.