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