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

Oracle查询:按SUBINVENTORY_CODE取MAX(COST_DATE),无需多余分组字段

解决方案:按子库存获取最新成本日期记录

在Oracle中可以用**窗口函数ROW_NUMBER()**实现你的需求,不需要对那些不需要分组的字段做GROUP BY,具体修改后的SQL如下:

SELECT INVENTORY_ITEM_ID,
       SUBINVENTORY_CODE,
       REC_TRXN_ID,
       TRANSACTION_ID,
       COST_DATE,
       QUANTITY_ONHAND,
       TRANSACTION_COST
FROM (
    SELECT A.INVENTORY_ITEM_ID,
           C.SUBINVENTORY_CODE,
           A.REC_TRXN_ID,
           B.TRANSACTION_ID,
           B.COST_DATE,
           A.QUANTITY_ONHAND,
           B.TRANSACTION_COST,
           -- 按子库存分区,每个分区内按成本日期倒序编号,最新的记录行号为1
           ROW_NUMBER() OVER (PARTITION BY C.SUBINVENTORY_CODE ORDER BY B.COST_DATE DESC NULLS LAST) AS RN
    FROM CST_ONHAND_V A,
         CST_ITEM_COST_HISTORY_V B,
         CST_TXN_LAYER_DTLS_V C
    WHERE 1=1
        AND A.INVENTORY_ITEM_ID = :p_inv_num
        AND A.REC_TRXN_ID = B.TRANSACTION_ID
        AND A.COST_ORG_ID = B.COST_ORG_ID
        AND A.COST_BOOK_ID = B.COST_BOOK_ID
        AND A.INVENTORY_ITEM_ID = B.INVENTORY_ITEM_ID                           
        AND A.REC_TRXN_ID = C.REC_TRXN_ID                             
)
WHERE RN = 1;

关键说明:

  • PARTITION BY C.SUBINVENTORY_CODE:把数据按子库存分成独立的组
  • ORDER BY B.COST_DATE DESC NULLS LAST:每个组内的记录按成本日期从新到旧排序,NULL值放在最后
  • ROW_NUMBER()会给每个组内的记录分配唯一的行号,最新的那条记录行号为1,外层筛选RN=1就能得到每个子库存的最新记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:23:25