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

Snowflake SQL日期筛选:如何提取无有效订阅的非活跃客户

筛选Snowflake中非活跃客户的正确方法

问题核心

你需要识别无当前/活跃订阅的客户:只要某个客户存在任意一条Date_End晚于指定日期(示例为2023-01-05)的合同,就属于活跃客户需排除;仅当该客户所有合同的Date_End均早于或等于指定日期时,才是非活跃客户需保留。

你最初的SQL错误在于:它返回了所有过期合同记录,包括那些本身有活跃合同的客户的历史过期数据,导致结果混入活跃客户的重复条目。

解决方案

以下是几种适用于Snowflake的高效实现方式:

1. GROUP BY + HAVING(最直接)

按客户ID分组,通过判断该客户的最晚合同结束日期是否符合非活跃条件,同时获取唯一客户名称:

SELECT 
    MAX(Name) AS Name,  -- 同一ID对应唯一Name,用MAX/MIN均可
    ID
FROM your_table
GROUP BY ID
HAVING MAX(Date_End) <= '2023-01-05'

2. 子查询排除活跃ID

先筛选出所有拥有活跃合同的ID,再从原表中排除这些ID并去重:

SELECT DISTINCT
    Name,
    ID
FROM your_table
WHERE ID NOT IN (
    SELECT DISTINCT ID
    FROM your_table
    WHERE Date_End > '2023-01-05'
)

3. 窗口函数标记客户状态

通过窗口函数计算每个客户的最晚合同结束日期,再筛选符合非活跃条件的记录:

WITH customer_summary AS (
    SELECT 
        Name,
        ID,
        MAX(Date_End) OVER (PARTITION BY ID) AS latest_contract_end
    FROM your_table
)
SELECT DISTINCT
    Name,
    ID
FROM customer_summary
WHERE latest_contract_end <= '2023-01-05'

补充说明

  • 若需使用当前日期而非固定日期,将'2023-01-05'替换为CURRENT_DATE()(Snowflake推荐使用该函数,与GETDATE()功能一致)。
  • 记得将your_table替换为你实际的表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:20:33