回答

收藏

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条款,现在应该能够工作;)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则