如何在SQL Server中筛选并展示首周存在的客户数据
筛选首周客户的所有交易记录,排除后续新增客户
需求说明
仅保留在第36周(首周)出现过的客户的所有交易记录,排除后续周首次出现的新客户(如C005、C006)。
解决方案1:内连接子查询
通过子查询提取所有第36周的客户ID,再与原表关联筛选出目标记录:
SELECT t.* FROM trydata t INNER JOIN ( -- 提取第36周出现过的唯一客户ID SELECT DISTINCT CustomerID FROM trydata WHERE Weeks = 36 ) AS first_week_customers ON t.CustomerID = first_week_customers.CustomerID;
解决方案2:使用EXISTS子句
通过EXISTS检查每条记录对应的客户是否在第36周有交易记录:
SELECT * FROM trydata t WHERE EXISTS ( SELECT 1 FROM trydata WHERE CustomerID = t.CustomerID AND Weeks = 36 );
逻辑说明
两种方法核心逻辑一致:
- 先定位所有在第36周有交易记录的客户
- 只保留这些客户的所有交易数据,自动排除从未在36周出现的新客户(如C005、C006)
期望结果
执行上述查询后,将得到以下结果(已排除C005、C006的所有记录):
| CustomerID | CustTrans | Weeks | CustSales |
|---|---|---|---|
| C001 | 2022-09-03 | 36 | 34 |
| C002 | 2022-09-02 | 36 | 23 |
| C003 | 2022-09-03 | 36 | 132 |
| C004 | 2022-09-02 | 36 | 95 |
| C002 | 2022-09-08 | 37 | 68 |
| C001 | 2022-09-05 | 37 | 54 |
| C002 | 2022-09-11 | 38 | 34 |
| C002 | 2022-09-23 | 39 | 98 |
| C004 | 2022-09-19 | 39 | 34 |
| C001 | 2022-09-18 | 39 | 30 |
| C003 | 2022-09-26 | 40 | 34 |
| C001 | 2022-09-25 | 40 | 34 |
内容的提问来源于stack exchange,提问作者tasya fauzia fitriasari
相关产品推荐
相关产品推荐

