当前位置: 首页 > news >正文

【SQL】计算一年内每个月份的周数据

        通过SQL编程实现以下功能:计算2025年内每个月份的周数据。要求每周从周日开始作为第一天,按月进行自然周分组,最终输出包含月份和周次的结果集。

SET DATEFIRST 7; -- 设置周日作为一周的第一天DECLARE @FirstDayOfYEAR DATE = '2025-01-01';  -- 年份起始日-- 生成全年所有月份
WITH Months AS (SELECT MonthNumber = 1,FirstDayOfMonth = @FirstDayOfYEAR,EndOfMonth = DATEADD(DAY, -1, DATEADD(MONTH, 1, @FirstDayOfYEAR))UNION ALLSELECT MonthNumber + 1,DATEADD(MONTH, 1, FirstDayOfMonth),DATEADD(DAY, -1, DATEADD(MONTH, 1, DATEADD(MONTH, 1, FirstDayOfMonth)))FROM MonthsWHERE MonthNumber < 12
),
-- 每个月的第一个周日
FirstSundayCTE AS (SELECT *,FirstSunday = CASE WHEN DATEPART(WEEKDAY, FirstDayOfMonth) = 1 THEN FirstDayOfMonthELSE DATEADD(DAY, (8 - DATEPART(WEEKDAY, FirstDayOfMonth)) % 7, FirstDayOfMonth)ENDFROM Months
),
-- 递归生成每周区间
Weeks AS (-- 第一周(可能跨月)SELECT MonthNumber,WeekNumber = 1,StartDate = FirstDayOfMonth,EndDate = CASE WHEN FirstSunday > FirstDayOfMonth THEN DATEADD(DAY, -1, FirstSunday)  -- 非完整周ELSE DATEADD(DAY, 6, FirstDayOfMonth)   -- 完整周(周日为第一天)END,EndOfMonthFROM FirstSundayCTEWHERE FirstSunday >= FirstDayOfMonth  -- 允许首日为周日UNION ALL-- 后续周(周日到下周六)SELECT MonthNumber,WeekNumber = WeekNumber + 1,StartDate = DATEADD(DAY, 1, Prev.EndDate),EndDate = CASE WHEN DATEADD(DAY, 6, DATEADD(DAY, 1, Prev.EndDate)) > EndOfMonth THEN EndOfMonth ELSE DATEADD(DAY, 6, DATEADD(DAY, 1, Prev.EndDate)) END,EndOfMonthFROM Weeks AS PrevWHERE DATEADD(DAY, 1, Prev.EndDate) <= EndOfMonth
)SELECT MonthNumber, WeekNumber, StartDate, EndDate FROM Weeks;
http://www.xdnf.cn/news/1380277.html

相关文章:

  • 上海控安:WiFi网络安全攻击
  • SONiC 之 Testbed(2)Ansible
  • GeoScene Maps 完整入门指南:从安装到实战
  • Android稳定性问题的常见原因是什么
  • 【python】@staticmethod装饰器
  • 同一个栅格数据,为何在QGIS和ArcGIS Pro中打开后显示的数值范围不同?
  • 苍穹外卖项目笔记day01
  • 【VSCode】使用VSCode打开md文件以及转化为PDF
  • uni-app 网络请求与后端交互完全指南:从基础到实战
  • ckman部署的clickhouse,节点迁移
  • Logstash数据迁移之es-to-kafka.conf详细配置
  • 用 Docker 玩转 Kafka 4.0镜像选型、快速起步、配置持久化与常见坑
  • 让模糊物体变清晰的视频AI:快速提升画质指南
  • 三维视频融合驱动视频孪生创新:智汇云舟引领数字孪生产业新范式
  • Runway Gen-2 深度技术解析:AI视频生成的范式变革
  • RAGFlow
  • 健永科技RFID技术在羊智能分群管理系统的使用案例
  • 传统星型拓扑结构的5G,WiFi无线通信网络与替代拓扑结构自组网
  • 【Linux】Linux基础开发工具从入门到实践
  • Foundry工具大全
  • 鸿蒙banner页实现
  • 数据库服务-主从同步-高可用架构MHA
  • 鸿蒙 5.1 深度解析:ArkUI 4.1 升级与分布式开发新范式
  • DPIN亮相DePIN Expo 2025,定义“DePIN 2.0”企业级应用新范式
  • AI批量抠图工具,无需付费,永久使用
  • 深入解析Oracle逻辑存储结构:从表空间到数据块的奥秘
  • 深入理解事务一致性和隔离性
  • 【大前端】React Native 调用 Android、iOS 原生能力封装
  • Cesium入门教程(二)环境搭建(HTML版)
  • leetcode 525 连续数组