无法为子查询添加限制,求助查询指定分店商品的最新采购价等信息
解决分店商品信息及最新采购价查询问题
嘿,我来帮你搞定这个获取最新采购价的难题!针对你提到的三张表,我整理了一个可行的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
相关产品推荐
相关产品推荐

