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

MariaDB多表查询:获取客户最早操作日期及对应操作

在MariaDB中查询客户最早操作日期及对应内容的解决方案

核心思路

先合并三个操作表的所有记录,再找出每个客户的最早操作日期,最后关联主表和操作记录,匹配出对应的操作内容。

完整SQL代码

WITH customer_actions AS (
    -- 合并三个表的所有操作记录
    SELECT `customer-id`, `Date`, `Action` FROM `Table One`
    UNION ALL
    SELECT `customer-id`, `Date`, `Action` FROM `Table Two`
    UNION ALL
    SELECT `customer-id`, `Date`, `Action` FROM `Table Three`
),
customer_first_action AS (
    -- 计算每个客户的最早操作日期
    SELECT 
        `customer-id`,
        MIN(`Date`) AS First_Action
    FROM customer_actions
    GROUP BY `customer-id`
)
-- 关联主表获取最终结果
SELECT 
    m.`customer-id`,
    m.Column_X,
    cfa.First_Action,
    ca.`Action`
FROM `主表` m
INNER JOIN customer_first_action cfa 
    ON m.`customer-id` = cfa.`customer-id`
INNER JOIN customer_actions ca 
    ON cfa.`customer-id` = ca.`customer-id` 
    AND cfa.First_Action = ca.`Date`;

代码解释

  1. 合并操作记录:用UNION ALL把三个操作表的customer-id、Date、Action字段整合到customer_actions临时表中,统一处理所有客户的操作数据。
  2. 计算最早日期:对customer_actions按customer-id分组,用MIN(Date)提取每个客户的最早操作时间,存入customer_first_action临时表。
  3. 关联获取结果:将主表与customer_first_action关联,再通过customer-id和最早日期匹配customer_actions,拿到对应操作内容。

特殊情况处理

如果某个客户在同一个最早日期有多个操作记录(即多条Action对应同一日期),查询会返回多行结果。若需只保留一行,可在最后查询中添加GROUP BY m.customer-id``,并用ANY_VALUE(ca.Action)取任意一条操作内容,或用GROUP_CONCAT(ca.Action)合并所有操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:19:01