用于计算过去 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的主要内容,如果未能解决你的问题,请参考以下文章