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

如何查询30天未下单客户并显示其最后下单日期

解决方案

你可以通过左连接聚合后的购买记录表,或者在SELECT子句中使用标量子查询来获取每个客户的最后一次购买日期,同时保留原查询的过滤逻辑。以下是两种可行的实现方式:

方法一:使用LEFT JOIN和聚合查询

先对购买记录表按客户分组计算最后购买日期,再与客户表左连接,最后过滤出过去30天无购买记录的客户:

SELECT 
    c.customer_id,
    c.first_name,
    c.last_name,
    p.last_purchase_date
FROM customers c
LEFT JOIN (
    SELECT 
        customer_id,
        MAX(purchase_date) AS last_purchase_date
    FROM purchases
    GROUP BY customer_id
) p ON c.customer_id = p.customer_id
WHERE 
    p.last_purchase_date < TRUNC(SYSTIMESTAMP) - NUMTODSINTERVAL(30, 'DAY')
    OR p.last_purchase_date IS NULL;

方法二:使用标量子查询

直接在SELECT子句中嵌入子查询获取每个客户的最后购买日期,保留原有的NOT EXISTS过滤逻辑:

SELECT 
    c.*,
    (SELECT MAX(purchase_date) FROM purchases p WHERE p.customer_id = c.customer_id) AS last_purchase_date
FROM customers c
WHERE NOT EXISTS (
    SELECT 1
    FROM purchases p 
    WHERE c.customer_id = p.customer_id 
      AND p.PURCHASE_DATE >= TRUNC(SYSTIMESTAMP) - NUMTODSINTERVAL (30, 'DAY')
      AND p.PURCHASE_DATE < TRUNC(SYSTIMESTAMP)
);

说明

  • 两种方法都会返回过去30天无购买记录的客户,last_purchase_date列显示其最后一次购买时间;若客户从未下单,则该列值为NULL。
  • 方法一的聚合查询一次性计算所有客户的最后购买日期,数据量较大时效率更优;方法二写法更简洁,适合小型数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:55:19