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

无需CTE,如何用Union/Except筛选无同日Sale的Fee记录?

解决方案

要定位那些无对应同日Sale的Fee记录(比如你提到的客户1在2025-01-08的那条),不用CTE的话,可以靠UNION整合两类事件的关联数据来实现:

SELECT yt.Event, yt.`Event Date`, yt.`Client ID`
FROM your_table_name yt
INNER JOIN (
    -- 用UNION把所有Fee和Sale的客户-日期组合分别标记类型,合并成一个数据集
    SELECT `Client ID`, `Event Date`, 'Fee' AS event_type
    FROM your_table_name
    WHERE Event = 'Fee'
    UNION
    SELECT `Client ID`, `Event Date`, 'Sale' AS event_type
    FROM your_table_name
    WHERE Event = 'Sale'
) event_summary ON yt.`Client ID` = event_summary.`Client ID` 
               AND yt.`Event Date` = event_summary.`Event Date`
WHERE yt.Event = 'Fee'
-- 分组后只留那些只有Fee类型的客户-日期组合
GROUP BY yt.`Client ID`, yt.`Event Date`, yt.Event
HAVING COUNT(DISTINCT event_summary.event_type) = 1

逻辑说明

  1. 内层的UNION把所有Fee和Sale事件按「客户ID+日期」维度拆分标记,相当于把两类事件的关联关系整理到了一个集合里
  2. 外层关联原表的Fee记录,通过分组计数筛选出那些分组里只有Fee标记的记录——这就意味着该客户在当天没有对应的Sale事件
  3. 最终返回的就是完全符合要求的违规Fee记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:34:50