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

如何按自然月周数统计上月开户数?SQL语法修正咨询

修正SQL以获取上月按当月周数统计的开户数量

原查询使用datepart(ww, doo)返回的是年度周数,要得到当月内的周序号(比如4月第一周显示为1),需要计算每个开户日期相对于当月第一天的周偏移量。

修正后的SQL语句

select 
    DATEDIFF(week, DATEADD(month, DATEDIFF(month, 0, doo), 0), doo) + 1 as 'Week No.',
    count(*) as 'No. of Account'
from accountmaster
where datediff(mm, doo, getdate()) = 1
group by DATEDIFF(week, DATEADD(month, DATEDIFF(month, 0, doo), 0), doo) + 1
order by 'Week No.'

关键逻辑说明

  • DATEADD(month, DATEDIFF(month, 0, doo), 0):精准获取doo字段对应日期所在月份的第一天
  • DATEDIFF(week, 当月第一天, doo) + 1:计算当前日期与当月第一天的周数差,加1后得到从1开始计数的当月周序号
  • 分组条件与查询字段的周数计算逻辑完全一致,确保分组统计的准确性

简化写法(适用于SQL Server 2022及以上版本)

如果你的SQL Server版本支持DATE_TRUNC函数,可以用更简洁的写法:

select 
    DATEPART(week, doo) - DATEPART(week, DATE_TRUNC('month', doo)) + 1 as 'Week No.',
    count(*) as 'No. of Account'
from accountmaster
where datediff(mm, doo, getdate()) = 1
group by DATEPART(week, doo) - DATEPART(week, DATE_TRUNC('month', doo)) + 1
order by 'Week No.'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:03:10