4

我试图弄清楚如何CHECK_AMOUNT在 SQL Server 2008 中获得过去/过去 30 周的每周平均值。

我尝试过这样的事情(见下文),但我认为这是几个月而不是几周。

SELECT TOP 30
    AVG(CHECK_AMOUNT) AS W2 
FROM 
    CHECKS 
WHERE 
    NOT UNT='256' 
GROUP BY 
    YEAR(DATE_GIVEN), MONTH(DATE_GIVEN) 

谁能告诉我如何使这成为可能,

谢谢...

4

3 回答 3

8

只需使用比较日期的 where 子句:

  select AVG(CHECK_AMOUNT)
  from CHECKS
  WHERE NOT UNT='256' and DATEDIFF(d, Date_Given, getdate()) <= 30*7

对不起; 我误读了这个问题。你想要每周的平均值。您的原始查询非常接近

  select DATEDIFF(d, Date_Given, getdate())/7 as weeks_ago, AVG(CHECK_AMOUNT)
  from CHECKS
  WHERE NOT UNT='256' and DATEDIFF(d, Date_Given, getdate()) <= 30*7
  group by DATEDIFF(d, Date_Given, getdate())/7

我将保留该where子句用于选择——而不是使用top 30——以防有几周没有检查。

于 2012-12-19T14:48:20.503 回答
5

您可以尝试将其添加到 group by 子句中吗?

datepart(week, DATE_GIVEN)
于 2012-12-19T14:48:04.780 回答
3

尝试使用 Datepart

SELECT TOP 30  AVG(CHECK_AMOUNT) AS W2 FROM CHECKS WHERE NOT UNT='256' GROUP BY Datepart(week,DATE_GIVEN)
于 2012-12-19T14:49:48.553 回答