我想计算过去24个月中我的数据的总和和平均值,我该如何实现?在我的数据库中,我有1000条记录与字段(ID,Store_ID,日期,销售)我想计算从这个月到过去24个月的所有数据的平均值。
答案 0 :(得分:0)
我相信您正在寻找DATEADD
功能。这是documentation。
基本上,您将使用where条件来检查日期是否早于特定日期。
通过将DATEADD
函数与当前时间一起使用,您可以创建过去X个月的日期。
SELECT columns FROM table WHERE date < DATEADD(month, numberOfMonths, GETDATE());
对于使用聚合函数的SQL查询(例如SUM
),根据您使用函数的方式,您可能需要HAVING
子句;而不是WHERE
条款。我不认为你的案子需要这个;但是,我可能错了。
您可以在此article上阅读HAVING vs WHERE
上的更多内容。
以下是一个例子:
SELECT columns FROM table HAVING date < DATEADD(month, numberOfMonths, GETDATE());
代码示例未经测试;但是,一般的结构就在那里。我们还使用GETDATE()
函数来获取当前数据库日期。
答案 1 :(得分:0)
请在下面的SQL中找到我在X表中获取给定组的最近12个月成员总数的内容。
您可以使用类似的方法,根据实际的表结构对下面的代码片段进行一些修改,以找出所需的结果集。
;with tbl1
as
(
select MonthID,count(MemberID) as RecCount from MemberTable a with (nolock) group by MonthID
)
,tbl2
as
(
select
ROW_NUMBER() OVER(order by MonthID) as RowID
,MonthID
,sum(RecCount) over(order by MonthID ROWS BETWEEN 11 PRECEDING and CURRENT ROW) as [SumLast12Months]
from tbl1
)
select * from tbl2 where RowID>=12 -- Before RowID 12 none of the month has complete 12 month rollup
答案 2 :(得分:0)
以下是其他几个选项:
select sum(Sales) as [Total Sales], avg(Sales) as [Average Sales]
from (select * from @tbl where dt >= dateadd(mm, -24, getdate())) as foo
或
with CTE
as
(
select * from @tbl where dt >= dateadd(mm, -24, getdate())
)
select sum(Sales) as [Total Sales], avg(Sales) as [Average Sales] from CTE