[英]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.