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

如何在MSSQL 2012中按月份统计近一年的外发消息数量?

解决MSSQL 2012每月外发消息数量统计问题

嗨,作为SQL新手遇到分组统计的困惑太正常了,我来帮你梳理问题并给出靠谱的写法~

先看你当前的SQL语句,核心问题出在分组逻辑上:你把具体的sentDateTime(每条消息的精准发送时间)、MessageID(每条消息的唯一标识)都放进了GROUP BY里,这样分组后还是每条消息单独一行,根本没法得到每月的总数量。而且把status别名成total也不是统计总数的正确方式哦。

正确的SQL写法

针对你统计近一年每月外发消息总数量的需求,调整后的语句如下:

SELECT
    CONVERT(NVARCHAR(7), sentDateTime, 120) AS Month,
    COUNT(*) AS TotalMessages
FROM MessageTable
WHERE
    -- 动态统计"近一年",自动计算当前日期往前推1年的时间
    sentDateTime >= DATEADD(year, -1, GETDATE())
    -- 如果你需要固定从2017-04-01开始统计,就换成下面这句
    -- CAST(sentDateTime AS DATE) >= '2017-04-01'
GROUP BY
    CONVERT(NVARCHAR(7), sentDateTime, 120)
ORDER BY
    Month ASC;

关键部分拆解解释

  • 日期转换:CONVERT(NVARCHAR(7), sentDateTime, 120)会把时间转换成YYYY-MM格式(比如2024-05),精准定位到“年月”维度,这是按月分组的核心。
  • 统计总数:COUNT(*)会统计每个分组内的记录条数,也就是对应月份的消息总数量,用TotalMessages做别名更直观。
  • 分组逻辑:GROUP BY只保留转换后的月份字段,这样同一月份的所有消息会被归为一组,才能算出总数。
  • 过滤条件:用DATEADD(year, -1, GETDATE())可以动态适配“近一年”的需求,不用手动改日期;如果是固定起始时间,就用你原来的日期判断即可。
  • 排序:按Month升序排列,结果会从最早的月份到最近的月份依次展示。

要是你还想统计每月成功发送的消息数量,只需要在WHERE里加个条件:AND status = '成功'(根据你实际的status字段值调整),再执行统计就好啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:18:10