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

Requête SQL pour la moyenne mobile sur 7 jours dans SQL Server

Essayez :

select x.*,
       avg(dailyusage) over(partition by productid order by productid, date rows between 6 preceding and current row) as rolling_avg
  from (select productid, date, sum(usagecount) as dailyusage
          from tbl
         group by productid, date) x

Violon :

http://sqlfiddle.com/#!6/f674a7/4/0

Remplacez "avg(dailusage) over...." par sum (plutôt que avg) si ce que vous voulez vraiment, c'est la somme de la semaine dernière. Dans votre titre, vous dites que vous voulez la moyenne, mais plus tard, vous dites que vous voulez la somme. La requête doit être la même à part cela, alors utilisez celle que vous voulez réellement.

Comme l'a souligné Gordon, il s'agit essentiellement de la moyenne des 6 dernières dates d'utilisation du produit, ce qui pourrait être plus que les 6 derniers jours s'il y a des jours sans ligne pour ce produit sur la table parce que c'était ' t utilisé du tout. Pour contourner cela, vous pouvez utiliser une table de dates et votre table de produits.