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

Posted

技术标签:

【中文标题】用于计算过去 24 个月及以上总和的 SQL【英文标题】:SQL for calculating the sum in the past 24 months and above 【发布时间】:2018-04-01 23:44:24 【问题描述】:

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

【问题讨论】:

您为解决问题做了哪些尝试? 你看过教程或手册了吗? 你已经发布了这个***.com/q/49583815/1415724 不是吗? @Tyler 我想每个月求和,但我怎样才能得到过去 23 个月的总和? php MS SQLSERVER - FOREACH argument的可能重复 【参考方案1】:

我相信您正在寻找DATEADD 函数。这是documentation。

基本上,您将使用 where 条件来检查日期是否早于某个日期。

通过对当前时间使用DATEADD 函数,您可以创建过去X 个月的日期。

SELECT columns FROM table WHERE date < DATEADD(month, numberOfMonths, GETDATE());

对于使用聚合函数(例如SUM)的SQL 查询,根据您使用函数的方式,您可能需要HAVING 子句;而不是 WHERE 子句。我认为您的案件不需要这样做;但是,我可能错了。

您可以通过article 了解更多关于HAVING vs WHERE 的信息。

这是一个例子:

SELECT columns FROM table HAVING date < DATEADD(month, numberOfMonths, GETDATE());

代码示例未经测试;但是,总体结构在那里。我们还使用GETDATE() 函数来获取当前数据库日期。

【讨论】:

一个问题我想输出这种格式“月份名称,年份”我该怎么做? @LawrenceAgulto 我只记得您可能遇到的一个可能的问题,可以修复HAVING 子句。我编辑了我的答案。 @LawrenceAgulto 格式化日期应该在 PHP 中完成,而不是在数据库中。请阅读这两个文档页面:date format 和 date 您遗漏了重要信息。因此,您似乎在猜测并且并不真正知道。这对您提请注意重要但似乎与 OP 的问题无关的主题无济于事(只需要简单的 GROUP BY 和日期操作)。虽然您的帮助尝试令人钦佩:OP 在问题中提出了no effort,因此无法写出明确的答案。因此,本问答对其他读者没有任何好处。将来,最好让 OP 将问题解决为可操作的问题。【参考方案2】:

请在下面的 SQL 中找到我在 X 表中获取给定组最近 12 个月成员总数的位置。

您可以使用类似的方法,根据实际表结构对下面的代码sn-p进行一些修改,以找出所需的结果集。

;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

【讨论】:

【参考方案3】:

这里有几个其他选项:

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

【讨论】:

以上是关于用于计算过去 24 个月及以上总和的 SQL的主要内容,如果未能解决你的问题,请参考以下文章

SQL Hive - 计算前几个月的滚动 SUM、AVG

按过去日期(12个月)计算

计算每个月过去 12 个月的平均值?

前 3 个月的滚动总和 SQL Server

用于计算同一列的值百分比的 SQL [关闭]

用于计算每天特定时间的销售额总和的 SQL