Ris*_*nst 5 sql t-sql sql-server
我正在使用Microsoft 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
Run Code Online (Sandbox Code Playgroud)
现在我需要生成一个"乱序"发送的OrderNumbers列表.因此,在此示例中,列表将只包含一个值:"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
Run Code Online (Sandbox Code Playgroud)
编辑:糟糕,我忘了WHERE条款,现在应该工作;)
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |