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

如何在SQL中将周数转换为ISO周数?附业务场景示例

获取ISO标准周数的SQL修改方案

问题背景

我的数据如下:

CustomerIDTrans_date
C00101-sep-22
C00104-sep-22
C00114-sep-22
C00203-sep-22
C00201-sep-22
C00218-sep-22
C00220-sep-22
C00302-sep-22
C00328-sep-22
C00408-sep-22
C00418-sep-22

用原SQL查询得到的结果和Excel WEEKNUM函数一致,但不符合ISO周规则,我需要转换成ISO周数来匹配目标结果。

原SQL:

WITH CTE (customerID,FirstWeek,RN) AS (
        SELECT customerID,MIN(DATEPART(week,tp_date)) TransWeek,
        ROW_NUMBER() over(partition by customerID ORDER BY DATEPART(week,tp_date) asc ) FROM all_table
        GROUP BY customerID,DATEPART(week,tp_date)
    ) 
    
    SELECT CTE.customerID, CTE.FirstWeek,  
         (select TOP 1 (DATEPART(week,c.tp_date))   
            from all_table c 
                where c.customerID = CTE.customerID AND DATEPART(week,C.tp_date) > CTE.FirstWeek 
                    )   SecondWeek 
    FROM CTE  
    WHERE RN = 1

原结果:

CustomerIDfirstweeksecondweek
C0013637
C0023639
C0033640
C0043739

目标ISO周结果:

CustomerIDfirstweeksecondweek
C0013537
C0023537
C0033539
C0033637

修改方案

在SQL Server中,直接使用DATEPART(iso_week, 日期)函数就能获取符合ISO标准的周数,替换原SQL中所有DATEPART(week, ...)的位置即可。

修改后的完整SQL:

WITH CTE (customerID, FirstWeek, RN) AS (
    SELECT 
        customerID,
        MIN(DATEPART(iso_week, tp_date)) AS FirstWeek,
        ROW_NUMBER() OVER (PARTITION BY customerID ORDER BY DATEPART(iso_week, tp_date) ASC) AS RN
    FROM all_table
    GROUP BY customerID, DATEPART(iso_week, tp_date)
) 
SELECT 
    CTE.customerID, 
    CTE.FirstWeek,  
    (SELECT TOP 1 DATEPART(iso_week, c.tp_date)   
     FROM all_table c 
     WHERE c.customerID = CTE.customerID 
       AND DATEPART(iso_week, c.tp_date) > CTE.FirstWeek 
    ) AS SecondWeek 
FROM CTE  
WHERE RN = 1

关键说明

  • ISO周的规则是每周从周一开始,且一年的第一周必须包含当年的第一个周四(即该周至少有4天在当年),这和DATEPART(week)默认的周日起始、第一周从1月1日开始的规则不同。
  • 替换所有周数计算的地方,包括分组、排序和子查询的条件,确保整个逻辑都基于ISO周规则执行。

内容的提问来源于stack exchange,提问作者tasya fauzia fitriasari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:45:53