sql >> Databáze >  >> RDS >> Sqlserver

Dotaz SQL pro 7denní klouzavý průměr v SQL Server

Zkuste:

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

Husla:

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

Nahraďte "avg(dailusage) over......" součtem (spíše než avg), pokud to, co opravdu chcete, je součet za minulý týden. V názvu říkáte, že chcete průměr, ale později řeknete, že chcete součet. Dotaz by měl být stejný než to, takže použijte, co skutečně chcete.

Jak zdůraznil Gordon, jedná se v podstatě o průměr posledních 6 dat, kdy byl produkt používán, což může být více než jen posledních 6 dní, pokud jsou v tabulce dny bez řádků pro daný produkt, protože nebyl nepoužívat vůbec. Chcete-li to obejít, můžete použít tabulku data a tabulku vašich produktů.



  1. Funkce PDO vs pg_*

  2. Coddova pravidla v SQL

  3. 2 způsoby, jak zobrazit seznam všech funkcí v MariaDB

  4. Jak provedu GROUP BY na aliasovém sloupci na serveru MS-SQL?