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

SQL查询问题:如何筛选过去12个月未产生订单的客户?

解决方案

方法1:使用LEFT JOIN筛选无匹配订单

从客户表出发,左连接过去12个月的订单记录,筛选出没有对应订单的客户:

SELECT  
    c.Customer_ID, 
    c.Loginname
FROM 
    Mouser_Com.dbo.Customer c
LEFT JOIN
    [Mouser_UVDATA].[dbo].[SalesOrder_Header] so 
    ON c.Customer_Id = so.Customer_Id
    AND so.OrderDate >= DATEADD(YEAR, -1, GETDATE()) 
    AND so.OrderDate < DATEADD(day, 1, GETDATE())
WHERE
    so.Customer_ID IS NULL

方法2:使用NOT EXISTS子查询

直接检查客户在过去12个月内无任何订单记录:

SELECT  
    c.Customer_ID, 
    c.Loginname
FROM 
    Mouser_Com.dbo.Customer c
WHERE NOT EXISTS (
    SELECT 1
    FROM [Mouser_UVDATA].[dbo].[SalesOrder_Header] so
    WHERE so.Customer_Id = c.Customer_Id
    AND so.OrderDate >= DATEADD(YEAR, -1, GETDATE()) 
    AND so.OrderDate < DATEADD(day, 1, GETDATE())
)

原查询问题说明

你原查询用INNER JOIN只会保留两边有匹配的记录,再加上WHERE条件筛选过去12个月的订单,导致无这段时间订单的客户根本不会进入结果集,因此HAVING COUNT(*) = 0无法返回数据。

两种方案中,NOT EXISTS通常性能更优,因为它找到第一个匹配记录就会停止检索,适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:43:17