Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Moyenne mobile / Moyenne mobile

Voici le SQL Fiddle qui illustre la requête suivante :

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

Dans votre question, vous demandiez de faire la somme de 3 valeurs consécutives. Vous avez modifié votre question en indiquant que le nombre d'enregistrements consécutifs dont vous avez besoin pour additionner pourrait changer. Dans la requête ci-dessus, vous devez simplement modifier le m.RowNumber + 2 à tout ce dont vous avez besoin.

Donc, si vous avez besoin de 60, utilisez

m.RowNumber + 59

Comme vous pouvez le voir, c'est très flexible puisque vous n'avez qu'à changer un numéro.