SQL用于计算过去24个月及以上的总和

时间:2018-04-01 23:44:24

标签: php sql sql-server

我想计算过去24个月中我的数据的总和和平均值,我该如何实现?在我的数据库中,我有1000条记录与字段(ID,Store_ID,日期,销售)我想计算从这个月到过去24个月的所有数据的平均值。

3 个答案:

答案 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