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

如何在多表left join查询中仅获取最新交易记录(避免subquery)

解决方案

要在不使用子查询的前提下获取每个客户的最新交易记录,可以通过**自连接(Self Join)**实现,核心思路是筛选出每个客户下没有更大交易编号的记录(即最新的那条)。

最终SQL语句

SELECT a.clientdid, a.clientcode, a.name, b.transactionnumber
FROM table_a a
LEFT JOIN table_b b ON a.clientdid = b.clientdid
LEFT JOIN table_b b2 ON b.clientdid = b2.clientdid AND b.transactionnumber < b2.transactionnumber
WHERE b2.transactionnumber IS NULL;

逻辑说明

  1. 第一次LEFT JOIN:关联客户表table_a和交易表table_b,保留所有客户记录。
  2. 第二次LEFT JOIN(自连接):将table_b与自身关联,匹配同一客户下交易编号更大的记录。
  3. WHERE条件:筛选出没有更大交易编号的记录(b2.transactionnumber IS NULL),这类记录就是该客户的最新交易记录。

补充说明

  • 如果交易表有专门的交易时间字段(如transaction_date),建议用时间字段替代交易编号做对比,结果会更准确,只需把条件b.transactionnumber < b2.transactionnumber替换为b.transaction_date < b2.transaction_date即可。
  • 若部分客户没有交易记录,LEFT JOIN会保留这些客户的信息,transactionnumber字段会显示为NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:01:11