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

按ModifiedDateTime排序工单事务遇同时间优先级问题求助

问题

我尝试按modifiedDateTime对工单事务排序,当前使用Row_Number()结合分区功能排序,之后仅选择rn = 1的记录。

当前代码:

ROW_NUMBER() OVER (
    PARTITION BY [AX].[WHSWorkLine].[WorkId] 
    ORDER BY [AX].[WHSWorkLine].[MODIFIEDDATETIME] DESC
) AS [rn]

遇到的问题:工作人员快速执行'pick'(拣货)和'put'(上架)操作时,两类事务的ModifiedDateTime记录为同一秒。当最新两条事务为同秒的'pick'和'put'类型时,需要优先排序'put'记录。但之前尝试用case表达式按WorkType排序时,会导致所有'put'事务排至顶部,忽略其他类型事务的时间先后。

以下是三种场景的预期排序示例:

场景1:存在其他类型事务

WorkIDWorkTypeModifiedDateTimern
1其他类型2024-01-01 11:00:001
1put2024-01-01 12:00:002
1pick2024-01-01 12:00:003

场景2:仅同秒的put和pick

WorkIDWorkTypeModifiedDateTimern
1put2024-01-01 12:00:001
1pick2024-01-01 12:00:002

场景3:put时间晚于pick

WorkIDWorkTypeModifiedDateTimern
1pick2024-01-01 11:00:001
1put2024-01-01 12:00:002

解决方案

只需在ORDER BY子句中,先按MODIFIEDDATETIME降序,再添加一个基于WorkType的case表达式作为第二排序条件即可。这样既保证了时间优先的原则,又能在同秒的pick和put事务中让put优先。

修改后的代码:

ROW_NUMBER() OVER (
    PARTITION BY [AX].[WHSWorkLine].[WorkId] 
    ORDER BY 
        [AX].[WHSWorkLine].[MODIFIEDDATETIME] DESC,
        CASE [AX].[WHSWorkLine].[WorkType] 
            WHEN 'put' THEN 1 
            WHEN 'pick' THEN 2 
            ELSE 3 
        END ASC
) AS [rn]

逻辑说明

  • 第一排序条件还是MODIFIEDDATETIME DESC,确保所有事务先按时间从新到旧排序,不会打乱其他类型事务的时间顺序;
  • 第二排序条件通过case表达式给不同WorkType赋值:put=1,pick=2,其他类型=3,再按升序排列。这样当两条事务时间相同时,put会排在pick前面,其他类型则按原有逻辑处理,不会出现所有put都跳转到顶部的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:47:23