T-SQL确定``顺序输入''记录
技术问答
450 人阅读
|
0 人回复
|
2023-09-12
|
我正在使用Microsoft SQL Server,不按顺序的记录需要从表中确定。7 C% b, w( V7 R$ @ I' v3 e
我将通过一个例子来解释。我有以下表结构:* Y. T& ^2 L. \5 l
OrderNumber OrderStatus EventDateTime00015298989 222 20144年-04-14 05:49:25.4444243000152989 26 201444440000152298989-04-14 05:51:16.70474500015298989 233 201440000150001529898989-04-14 05:51:17.8602780001529000152990 233 2014年 -04-14 05:51:19.960350001529000152990 24 2014年 -04-14 05:52:06.5803400152900015290 24 20144000015000015299000-04-14 05:52:06.5803494现在,我需要生成无序发送OrderNumbers列表。因此,在这个例子中,列表只包含一个值: 00152989。
X/ {2 U- N; c7 h3 f) V }订单000152990以正确的顺序发送(首先是状态23,然后是状态24,然后是状态24(这不序)。6 u$ L" j$ R8 c0 P
0000152989的发送顺序不正确(先是状态22,再是状态26,再是状态23)。! b/ Y8 e- F# V) Y- P' }! `) P
任何关于如何实现这个目标的想法?( R7 n! C% o/ c
提前致谢。$ H: x) u7 H, n [5 R" L& W9 e. r
编辑 我添加了订单的可能性,并连续两次发送相同的状态(这不应被视为混乱)$ G+ ~, ^$ G6 ?: B4 f
最好的祝福' E( W) }# J, K) b8 x: F. Z
* m% F4 L- v3 N" s 解决方案: j8 W$ M7 H: P @, B; Y
从SQL Server 2008开始…
I. L% B7 y: m" c' r# {( SSELECT OrderNumberFROM( 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 yourTableSequencedWHERE sequenceCorrect sequenceActualGROUP BY OrderNumberORDER BY OrderNumber编辑: 不好,我忘了WHERE条款,现在应该能够工作;) |
|
|
|
|
|