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

MySQL关联两表获取各客户近6个月最新订单及客户信息

MySQL查询解决方案:获取客户近6个月最后一笔订单并关联客户信息

方法一:使用窗口函数(MySQL 8.0及以上版本适用)

利用ROW_NUMBER()窗口函数按客户分组,对订单日期倒序排序,直接定位每个客户的最新订单:

SELECT 
    ci.customer_id,
    ci.customer_name,
    ol.order_date
FROM 
    (SELECT 
         customer_id,
         order_date,
         -- 按客户分组,订单日期从新到旧排序,每组第一条标记为1
         ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
     FROM 
         order_log
     WHERE 
         -- 筛选近6个月的订单
         order_date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
    ) AS ol
-- 关联客户信息表
JOIN customer_info ci ON ol.customer_id = ci.customer_id
-- 只保留每个客户的最新订单(排序后的第一条)
WHERE ol.rn = 1;

方法二:子查询获取最大订单日期(兼容MySQL 5.x版本)

如果你的MySQL版本不支持窗口函数,可通过子查询先找出每个客户近6个月的最晚订单日期,再关联订单表和客户表:

SELECT 
    ci.customer_id,
    ci.customer_name,
    ol.order_date
FROM 
    customer_info ci
-- 关联订单日志表
JOIN order_log ol ON ci.customer_id = ol.customer_id
-- 关联子查询得到的每个客户最新订单日期
JOIN (
    SELECT 
        customer_id,
        MAX(order_date) AS last_order_date
    FROM 
        order_log
    WHERE 
        order_date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
    GROUP BY customer_id
) AS last_orders 
    ON ol.customer_id = last_orders.customer_id 
    AND ol.order_date = last_orders.last_order_date;

关于UNION关键字的误区

UNION的作用是合并多个独立查询的结果集,而你需要的是关联不同表获取关联数据,这属于表连接场景,应该用JOIN系列关键字,UNION并不适用于这个需求,所以之前尝试UNION会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:35:41