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

如何修改SQL查询实现满足任一条件即从suppression list排除用户

问题原因

你原来的SQL使用UNION取两个集合的并集,逻辑是「只要满足近1年没下单 或 没打开过邮件任意一条,就进入列表」,和你需要的规则完全相反:你要的是「近1年有下单 或 有打开邮件任意一条就排除」,也就是最终进入列表的用户需要同时满足近1年无下单、无邮件打开两个条件。

修正方案

方案1:基于你现有的email_no_opens表(存储无打开记录的用户)

直接用逻辑与关联两个条件即可:

SELECT DISTINCT c.CUSTOMER_UUID
FROM Customers c
-- 条件1:近1年无下单记录
WHERE c.last_transaction_date <= DATEADD(YEAR, -1, GETDATE())
-- 条件2:无邮件打开记录
AND c.CUSTOMER_UUID IN (SELECT CUSTOMER_UUID FROM [email_no_opens])

也可以用内连接实现,大数据量下性能更优:

SELECT DISTINCT c.CUSTOMER_UUID
FROM Customers c
INNER JOIN [email_no_opens] e 
  ON c.CUSTOMER_UUID = e.CUSTOMER_UUID
WHERE c.last_transaction_date <= DATEADD(YEAR, -1, GETDATE())

方案2:如果你有原始邮件行为表(存储所有打开/点击等事件)

用NOT EXISTS写法逻辑更直观,不需要依赖预计算的email_no_opens表:

SELECT DISTINCT c.CUSTOMER_UUID
FROM Customers c
WHERE 
  -- 近1年无下单
  c.last_transaction_date <= DATEADD(YEAR, -1, GETDATE())
  -- 无任何邮件打开记录
  AND NOT EXISTS (
    SELECT 1 
    FROM email_events ee 
    WHERE ee.CUSTOMER_UUID = c.CUSTOMER_UUID 
      AND ee.event_type = 'open'
  )

注意事项

如果你的Customers表存在从未下单的用户,last_transaction_date可能为NULL,需要额外补充OR c.last_transaction_date IS NULL到WHERE条件里,避免这部分用户被遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:15:06