You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用T-SQL按日期及月度分组并汇总数据?

问题描述

我有如下结构的表:

datexcountx
2022-12-041
2022-12-032
2022-12-021
2022-12-013
2022-11-301
2022-11-291
2022-11-281
2022-11-272

希望得到如下输出结果:

datexcount_sum
2022-124
2022-12-013
2022-115

测试代码如下:

declare @test table  
(
    datex date,
    countx int
)

insert into @test 
values ('2022-12-04', 1),
       ('2022-12-03', 2),
       ('2022-12-02', 1),
       ('2022-12-01', 3),
       ('2022-11-30', 1),
       ('2022-11-29', 1),
       ('2022-11-28', 1),
       ('2022-11-27', 2)
解决方案

要实现这个需求,需要将两类数据合并:一类是排除特定日期的月度汇总数据,另一类是单独保留的特定日期数据,用UNION ALL组合结果即可:

-- 第一部分:月度汇总(排除2022-12-01)
SELECT
    FORMAT(datex, 'yyyy-MM') AS datex,
    SUM(countx) AS count_sum
FROM @test
WHERE NOT (datex = '2022-12-01')
GROUP BY FORMAT(datex, 'yyyy-MM')

UNION ALL

-- 第二部分:单独保留2022-12-01的数据
SELECT
    CONVERT(varchar, datex, 23) AS datex,
    countx AS count_sum
FROM @test
WHERE datex = '2022-12-01'

-- 按时间排序,让结果更规整
ORDER BY 
    CASE WHEN CHARINDEX('-', datex) = 7 THEN CONVERT(date, datex + '-01') ELSE CONVERT(date, datex) END DESC,
    LEN(datex) ASC

关键说明

  1. 月度汇总:用FORMAT(datex, 'yyyy-MM')把日期转成年月格式,对除指定日期外的数据按年月分组求和。
  2. 单独日期处理:直接筛选出目标日期的记录,保留原日期格式和数值。
  3. 排序逻辑:通过自定义排序规则,确保结果按时间从新到旧排列,同时让月度数据和单日数据的顺序更合理。

如果需要动态适配不同的特定日期,只要调整WHERE子句的筛选条件即可。

内容的提问来源于stack exchange,提问作者HKN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:55:27