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

如何在SQL Server中找出状态序列异常的销售订单记录

解决方案:检索不符合状态流转规则的PICKED记录

在SQL Server中,可以使用窗口函数LAG()来获取每个订单状态变更的上一个状态,从而筛选出不符合规则的记录。具体步骤如下:

核心思路

  1. 按订单号(sro_num)分组,按状态变更序列(seq)排序,获取每条记录的上一个状态。
  2. 筛选出当前状态为PICKED,且上一个状态不是READY或PARTIALSHIP的记录。

实现SQL代码

SELECT 
    sro_num,
    seq,
    stat_code,
    prev_stat_code AS 上一个状态
FROM (
    SELECT 
        sro_num,
        seq,
        stat_code,
        -- 获取同订单的上一个状态
        LAG(stat_code) OVER (PARTITION BY sro_num ORDER BY seq) AS prev_stat_code
    FROM 你的表名 -- 替换为实际表名
) AS status_history
WHERE 
    stat_code = 'PICKED'
    AND prev_stat_code NOT IN ('READY', 'PARTIALSHIP');

代码说明

  • LAG(stat_code) OVER (PARTITION BY sro_num ORDER BY seq):按订单号分组,按seq升序排列,取当前行的前一行的stat_code值,也就是该状态变更的前置状态。
  • 外层查询筛选出当前状态是PICKED,且前置状态不在允许列表中的记录,这些就是违规的状态变更。

针对你提供的示例数据

运行上述SQL后,会返回以下结果:

sro_num    seq  stat_code  上一个状态
------------------------------------
SO00053441  3   PICKED     INV HOLD

这条记录的前置状态是INV HOLD,不符合PICKED的前置规则,因此被筛选出来;而SO00053441的第12条PICKED记录,前置状态是READY,符合规则,不会被返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:00:02