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

如何在SQL Server中筛选首周为35且次周为37的查询结果

如何调整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
C0013537
C0023537
C0033539
C0033637

期望结果

CustomerIDfirstweeksecondweek
C0013537
C0023537

修改后的查询语句

只需在原查询的外层WHERE子句中添加筛选条件,即可得到期望结果:

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
    AND FirstWeek = 35
    AND SecondWeek = 37

说明

通过在原查询的外层筛选条件中增加FirstWeek = 35和SecondWeek = 37,可以直接过滤出符合要求的记录,同时保留原查询中RN = 1的条件,确保只获取每个客户的最早交易周数据。

内容的提问来源于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.12 09:01:45