簡體   English   中英

T-SQL 確定“亂序”記錄

[英]T-SQL to determine “out of sequence” records

我正在使用 SQL 服務器,我需要確定表中“亂序”的記錄。

我通過一個例子來解釋。 我有以下表結構:

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

現在我需要生成一個“亂序”發送的 OrderNumber 列表。 所以在這個例子中,列表將只包含一個值:“0001522989”。

訂單 0001522990 以正確的順序發送(首先是狀態 23,然后是狀態 24,然后是狀態 24(這不算作“無序”))。

訂單 0001522989 的發送順序不正確(先是狀態 22,然后是狀態 26,然后是狀態 23)。

關於我如何做到這一點的任何想法?

我添加了訂單連續兩次發送相同狀態的可能性(這不應算作“亂序”)

提前致謝。

在 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子句,現在應該可以工作了;)

如果問題歸結為:

查找狀態編號較低且日期較高的所有發票編號

你可以做:

select OrderNumber 
from Orders o1
where exists (select * from Orders o2 
              where o2.OrderNumber = o1.OrderNumber
                and o2.OrderStatus >= o1.OrderStatus 
                and o2.EventDateTime < o1.EventDateTime)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM