You need to enable JavaScript to run this app. SQL查询:获取未完全发货订单的下一预计到货日期
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询:获取未完全发货订单的下一预计到货日期

未完全发货未结订单及下一预计到货日期实现方案

核心优化逻辑

  • 跳过无意义的全表扫描:不需要遍历所有已完全发货的订单项做无效计算,提前基于最小粒度聚合数据,减少关联计算量
  • 剔除冗余表关联:Shipment主表在当前需求中没有需要取的字段,不需要参与连接,避免不必要的性能损耗
  • 利用覆盖索引特性:通过配套索引设计,让查询全程不需要回表读取数据页,大幅降低IO开销

推荐配套性能优化索引

以下索引可覆盖查询全流程的字段读取需求,在大数据量场景下比无索引查询快1-2个数量级

  • ShipmentItem表联合索引:(SalesOrderItemId, Qty),覆盖订单项关联、累计已发量计算的全部字段
  • SalesOrderItem表联合索引:(SalesOrderId, SalesOrderItemId, Qty, DateExpected),覆盖订单维度聚合、数量对比、预计到货日期读取的全部字段

高效实现SQL

SELECT
    soi.SalesOrderId,
    MIN(soi.DateExpected) AS NextDateExpected
FROM SalesOrderItem soi
LEFT JOIN (
    -- 提前按订单项粒度聚合已发货数量,避免大表关联时重复计算
    SELECT
        SalesOrderItemId,
        SUM(Qty) AS TotalShippedQty
    FROM ShipmentItem
    GROUP BY SalesOrderItemId
) shipped ON shipped.SalesOrderItemId = soi.SalesOrderItemId
WHERE
    -- 判定未完全发货:无发货记录则已发量记为0,只要小于订购量即标记为未结
    ISNULL(shipped.TotalShippedQty, 0) < soi.Qty
GROUP BY soi.SalesOrderId

方案对比说明

  • 相比最初的实现思路,该方案没有先关联所有发货主表、也没有先拉取所有订单项做全量遍历,聚合过程全部在最小数据粒度完成,数据库优化器可自动选择流式聚合算法,避免大内存排序/哈希的开销
  • 最终返回的结果完全符合字段要求:仅输出销售订单ID、对应下一预计到货日期(无有效预计时间时自动返回NULL)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 02:54:02