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

无法为子查询添加限制,求助查询指定分店商品的最新采购价等信息

解决分店商品信息及最新采购价查询问题

嘿,我来帮你搞定这个获取最新采购价的难题!针对你提到的三张表,我整理了一个可行的SQL方案,而且完全不用给子查询加额外限制,一起来看看:

核心思路

我们需要关联三张表获取基础信息,重点用窗口函数来筛选每个商品的最新采购记录——这是替代带限制子查询的绝佳方案,能精准定位每个商品的最新采购价。

完整SQL语句

SELECT 
    i.item_name AS 商品名称,
    i.item_desc AS 商品描述,
    s.stock_quantity AS 库存数量,
    pd.latest_purchase_price AS 最新采购价
FROM 
    Item i
-- 关联库存表,筛选指定分店的商品
JOIN 
    Stock s ON i.item_id = s.item_id
-- 左关联处理后的采购明细,确保无采购记录的商品也能显示
LEFT JOIN (
    SELECT 
        item_id,
        purchase_price AS latest_purchase_price,
        -- 按商品分组,采购时间倒序排序,标记最新记录为1
        ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY purchase_date DESC) AS rn
    FROM 
        itemPurchaseDetail
) pd ON i.item_id = pd.item_id AND pd.rn = 1
WHERE 
    s.branch_id = 1;

关键细节说明

  • 窗口函数ROW_NUMBER():它会给每个item_id分组内的采购记录按purchase_date(采购时间)倒序编号,编号为1的就是最新的采购记录,直接取这条的价格即可。
  • LEFT JOIN的作用:如果某个商品还没有任何采购记录,用LEFT JOIN能保证商品的基本信息和库存依然会被查询出来,最新采购价会显示为NULL,更符合业务实际。
  • 替代排序字段:如果你的采购明细表里没有purchase_date,而是用自增的采购单ID(比如purchase_id,越大代表采购越晚),可以把ORDER BY purchase_date DESC改成ORDER BY purchase_id DESC,效果一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:40:52