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

如何关联返回单条结果的子查询?查询客户最新购买记录

用JOIN实现获取所有客户及最新购买记录的方案

没问题,这需求很常见,我来一步步帮你搞定。

首先咱们得明确核心目标:既要返回所有客户的基础信息,又要匹配到每位客户最近的那笔购买记录。用JOIN的方式来做的话,核心思路是先找出每个客户的最新购买日期,再通过这个日期关联回销售表,拿到对应的订单详情。

步骤1:先获取每个客户的最新购买日期

咱们可以先写个子查询,按客户ID分组,找出每个客户的最大购买日期(也就是最新的那笔):

SELECT CustID, MAX(DatePurchase) AS LatestPurchaseDate
FROM Sales
GROUP BY CustID

这个子查询会生成一个临时结果集,每个客户ID对应它的最新购买日期。

步骤2:关联客户表、临时结果集和销售表

接下来用LEFT JOIN把三个部分关联起来,确保哪怕没有购买记录的客户也能被包含进来:

SELECT 
    c.[Cust ID],
    c.[Cust Name],
    s.DatePurchase AS LatestPurchaseDate,
    s.Amount AS LatestPurchaseAmount
FROM Customers c
-- 关联每个客户的最新购买日期
LEFT JOIN (
    SELECT CustID, MAX(DatePurchase) AS LatestPurchaseDate
    FROM Sales
    GROUP BY CustID
) latest_sales ON c.[Cust ID] = latest_sales.CustID
-- 通过客户ID+最新日期关联回销售表,拿到对应的订单金额
LEFT JOIN Sales s 
    ON latest_sales.CustID = s.CustID 
    AND latest_sales.LatestPurchaseDate = s.DatePurchase

补充说明

  • 用LEFT JOIN而不是INNER JOIN的原因:这样没有任何购买记录的客户也会出现在结果里,对应的购买日期和金额会显示为NULL,完全符合你“返回所有客户信息”的要求。
  • 如果遇到一个客户在同一天有多笔购买记录,这个查询会返回该客户的所有当日订单。如果想只保留其中一条(比如金额最大的),可以在子查询里再加一层筛选,或者用窗口函数(比如ROW_NUMBER())来实现,不过如果严格按你要求的JOIN方式,上面的写法就足够满足基础需求了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:19