fix(sql): 优化coil操作查询逻辑
- 使用ROW_NUMBER窗口函数替代子查询和JOIN操作 - 简化查询结构,提高执行效率 - 保留对coilIds的可选过滤条件 - 确保每个coilId只返回最新的记录
This commit is contained in:
@@ -17,28 +17,20 @@
|
|||||||
<result property="updateTime" column="update_time"/>
|
<result property="updateTime" column="update_time"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<select id="getCoilOperate" resultMap="WmsDeliveryPlanCoilOperateResult">
|
<select id="getCoilOperate" resultMap="WmsDeliveryPlanCoilOperateResult">
|
||||||
SELECT t.*
|
SELECT * FROM (
|
||||||
FROM wms_delivery_plan_coil_operate t
|
|
||||||
INNER JOIN (
|
|
||||||
-- 子查询:先获取每个coilId的最新创建时间(限定planId和coilIds)
|
|
||||||
SELECT
|
SELECT
|
||||||
coil_id,
|
t.*,
|
||||||
MAX(create_time) AS max_create_time
|
ROW_NUMBER() OVER (PARTITION BY t.coil_id ORDER BY t.create_time DESC) AS rn
|
||||||
FROM wms_delivery_plan_coil_operate
|
FROM wms_delivery_plan_coil_operate t
|
||||||
WHERE plan_id = #{planId}
|
WHERE plan_id = #{planId}
|
||||||
AND coil_id IN
|
<if test="coilIds != null and coilIds.length > 0">
|
||||||
<foreach collection="coilIds" item="coilId" open="(" separator="," close=")">
|
AND coil_id IN
|
||||||
#{coilId}
|
<foreach collection="coilIds" item="coilId" open="(" separator="," close=")">
|
||||||
</foreach>
|
#{coilId}
|
||||||
GROUP BY coil_id
|
</foreach>
|
||||||
) t_max ON t.plan_id = #{planId}
|
</if>
|
||||||
AND t.coil_id = t_max.coil_id
|
) tmp
|
||||||
AND t.create_time = t_max.max_create_time
|
WHERE tmp.rn = 1
|
||||||
-- 最终过滤目标coilIds(双重保障)
|
|
||||||
WHERE t.coil_id IN
|
|
||||||
<foreach collection="coilIds" item="coilId" open="(" separator="," close=")">
|
|
||||||
#{coilId}
|
|
||||||
</foreach>
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user