如何编写一个SQL语句以每两个相邻月的同一天按组对数据求和

stkflmb12

我有一个像这样的数据表:

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
...
蒂姆·比格莱森(Tim Biegeleisen)

一种进行此操作的概念性方法是将“月”重新定义为每个正常月的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

年份,同一月和同一天的两个日期之间的差额

如何判断两个日期是否在同一天?

如何检查两个NSDate是否来自同一天

如何在nodejs中的本地时间确定两个日期是同一天?

如何获得同一天的两个条目之间的差额?

如果不是在同一天,如何处理两个不同的时间?

如何检查两个LocalTime是否在同一天?

按最近日期对数组排序,如果同一天只允许一个日期

比较两个java.util.Date以查看它们是否在同一天

比较两个Date实例是否引用同一天

筛选日期,同一天的两个随机日期之间的间隔为1小时

SQL/VBA:如何从一个月的第一天以外的一天开始按会计年度分组

同一天的求和和平均

使用momentjs,我如何确定两个时刻是否代表同一天(不一定是同一时间)?

仅当特定列在同一天内具有两个或更多不同的ip_address时才选择记录

如何在SQL中选择一个月的第一天?

如何获得一个月的最后一天在不同的物品上?-SQL

SQL:你如何获取一个月的第一天?

MySQL如何按两个日期之间的每一天分组?

查找另一个Unix时间戳MySQL在同一天内的所有记录

Swift - 检查两个数组是否在同一天没有循环

如何在同一SQL语句中使用两个条件对字段进行两次求和

如何为两个变量编写一个SQL语句,一个包含表名,另一个包含表中的特定列?

SQL:同一天的时间戳记间隔之和

如何计算同一天发生的客户行为?

如何将时差限制在同一天?

如何计算同一天的持续时间?

春季数据JPA - 如何只用一个月,一天,我取从日期列数据?

如何在同一个查询中对两个表计数求和?