小编典典

T-SQL确定``顺序输入''记录

sql

我正在使用Microsoft SQL Server,需要从表中确定“不按顺序”的记录。

我将通过一个示例进行说明。我具有以下表结构:

OrderNumber OrderStatus EventDateTime
0001522989  22          2014-04-14 05:49:25.4414243
0001522989  26          2014-04-14 05:51:16.7047485
0001522989  23          2014-04-14 05:51:17.8602798
0001522990  23          2014-04-14 05:51:19.9603575
0001522990  24          2014-04-14 05:52:06.5803494
0001522990  24          2014-04-14 05:52:06.5803494

现在,我需要生成“无序发送”的OrderNumbers列表。因此,在此示例中,列表将仅包含一个值:“ 0001522989”。

订单0001522990以正确的顺序发送(首先是状态23,然后是状态24,然后又是状态24(这不算作“乱序”))。

订单0001522989的发送顺序不正确(首先是状态22,然后是状态26,然后是状态23)。

关于如何实现此目标的任何想法吗?

提前致谢。

编辑 我添加了订单的可能性,以连续两次发送相同的状态(这不应该算作“乱序”)

最好的祝福


阅读 163

收藏
2021-05-23

共1个答案

小编典典

从SQL Server 2008开始…

SELECT
  OrderNumber
FROM
(
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY OrderNumber ORDER BY OrderStatus, EventDateTime  )   AS sequenceCorrect,
    ROW_NUMBER() OVER (PARTITION BY OrderNumber ORDER BY              EventDateTime)   AS sequenceActual
  FROM
    yourTable
)
  AS yourTableSequenced
WHERE
  sequenceCorrect <> sequenceActual
GROUP BY
  OrderNumber
ORDER BY
  OrderNumber

编辑: 糟糕,我忘记了该WHERE条款,现在应该可以工作;)

2021-05-23