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

MySQL:获取分组最新记录并关联另一表数据的查询实现

解决方案:关联库存表与最新采购记录

没问题,我来帮你搞定这个查询需求!你需要的是让每条库存记录只关联对应采购单的最新采购信息(也就是同purchase_id下keyid最大的那条采购记录),下面给你两种实用的解决方案:

方法一:使用子查询获取每个采购单的最新记录ID

这种方法兼容性好,适合所有MySQL版本:

SELECT 
    s.keyid, 
    s.purchase_id, 
    s.status, 
    p.brand, 
    p.model, 
    p.keyid AS purkeyid
FROM tStockMP AS s
-- 关联采购表
JOIN tPurchases AS p ON s.purchase_id = p.purchase_id
-- 关联子查询:先找出每个purchase_id对应的最大keyid(最新采购记录)
JOIN (
    SELECT purchase_id, MAX(keyid) AS max_keyid
    FROM tPurchases
    GROUP BY purchase_id
) AS latest_pur 
    ON p.purchase_id = latest_pur.purchase_id 
    AND p.keyid = latest_pur.max_keyid;

逻辑说明:

  1. 子查询latest_pur按purchase_id分组,计算每个采购单的最大keyid,得到每个采购单的最新记录ID;
  2. 将库存表、采购表与这个子查询关联,确保只筛选出采购表中keyid等于对应采购单最大keyid的记录,也就是最新的采购信息。

方法二:使用窗口函数(MySQL 8.0+ 推荐)

如果你的MySQL版本是8.0及以上,窗口函数会更简洁直观:

SELECT 
    s.keyid, 
    s.purchase_id, 
    s.status, 
    p.brand, 
    p.model, 
    p.keyid AS purkeyid
FROM tStockMP AS s
-- 关联处理后的采购表:给每个采购单的记录按keyid倒序排号,最新的记录序号为1
JOIN (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY purchase_id ORDER BY keyid DESC) AS rn
    FROM tPurchases
) AS p 
    ON s.purchase_id = p.purchase_id 
    AND p.rn = 1;

逻辑说明:

  1. 用ROW_NUMBER()窗口函数,按purchase_id分组(PARTITION BY purchase_id),每组内按keyid倒序排序(ORDER BY keyid DESC),给每条记录分配一个序号rn;
  2. 最新的采购记录序号为1,关联时只取rn=1的记录,就能得到每个库存记录对应的最新采购信息。

两种方法都能得到你想要的预期结果,你可以根据自己的MySQL版本选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:23:10