我有一个像这样的数据表:
datetime data
-----------------------
...
2017/8/24 6.0
2017/8/25 5.0
...
2017/9/24 6.0
2017/9/25 6.2
...
2017/10/24 8.1
2017/10/25 8.2
我想编写一条SQL语句以在一定时间范围内(例如:从2017/7/20到2017/10/25),每隔两个相邻月的24日对组进行数据求和。
怎么写这个SQL语句?我正在使用SQL Server 2008 R2。
预期结果表如下所示:
datetime_range data_sum
------------------------------------
...
2017/8/24~2017/9/24 100.9
2017/9/24~2017/10/24 120.2
...
一种进行此操作的概念性方法是将“月”重新定义为每个正常月的24日结束。使用SQL Server month函数,我们会将24日之后发生的任何日期分配为下个月。然后,我们可以将年份与该转移的月份合计以获得数据的总和。
WITH cte AS (
SELECT
data,
YEAR(datetime) AS year,
CASE WHEN DAY(datetime) > 24
THEN MONTH(datetime) + 1 ELSE MONTH(datetime) END AS month
FROM yourTable
)
SELECT
CONVERT(varchar(4), year) + '/' + CONVERT(varchar(2), month) +
'/25~' +
CONVERT(varchar(4), year) + '/' + CONVERT(varchar(2), (month + 1)) +
'/24' AS datetime_range,
SUM(data) AS data_sum
FROM cte
GROUP BY
year, month;
请注意,您建议的范围似乎在两端都包括24,从会计角度来看这没有意义。我假设该月包括并在24日结束(即25日是下一个会计期间的第一天)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句