我们有下表(输出已经排序并分开以便理解):
| PK | FK1 | FK2 | ActionCode | CreationTS | SomeAttributeValue |
+----+-----+-----+--------------+---------------------+--------------------+
| 6 | 100 | 500 | Create | 2011-01-02 00:00:00 | H |
----------------------------------------------------------------------------
| 3 | 100 | 500 | Change | 2011-01-01 02:00:00 | Z |
| 2 | 100 | 500 | Change | 2011-01-01 01:00:00 | X |
| 1 | 100 | 500 | Create | 2011-01-01 00:00:00 | Y |
----------------------------------------------------------------------------
| 4 | 100 | 510 | Create | 2011-01-01 00:30:00 | T |
----------------------------------------------------------------------------
| 5 | 100 | 520 | CreateSystem | 2011-01-01 00:30:00 | A |
----------------------------------------------------------------------------
什么是ActionCode
?我们在其中使用它,c#
它代表一个枚举值
我想达到什么目的?
好吧,我需要以下输出:
| FK1 | FK2 | ActionCode | SomeAttributeValue |
+-----+-----+--------------+--------------------+
| 100 | 500 | Create | H |
| 100 | 500 | Create | Z |
| 100 | 510 | Create | T |
| 100 | 520 | CreateSystem | A |
-------------------------------------------------
那么,实际的逻辑是什么?我们有一些组合键(FK1 + FK2)的逻辑组。这些组中的每一个都可以分成以Create
或开头的分区CreateSystem
。每个分区以Create
,CreateSystem
或结尾Change
。每个分区的实际值SomeAttributeValue
应该是分区最后一行的值。
不可能有以下数据池:
| PK | FK1 | FK2 | ActionCode | CreationTS | SomeAttributeValue |
+----+-----+-----+--------------+---------------------+--------------------+
| 7 | 100 | 500 | Change | 2011-01-02 02:00:00 | Z |
| 6 | 100 | 500 | Create | 2011-01-02 00:00:00 | H |
| 2 | 100 | 500 | Change | 2011-01-01 01:00:00 | X |
| 1 | 100 | 500 | Create | 2011-01-01 00:00:00 | Y |
----------------------------------------------------------------------------
然后期望 PK 7 影响 PK 2 或 PK 6 影响 PK 1。
我什至不知道如何/从哪里开始......我怎样才能做到这一点?我们在 mssql 2005+ 上运行
编辑:
有一个可用的转储:
- instanceId:我的PK
- 租户 ID:FK 1
- 活动 ID:FK 2
- callId:FK 3
- refillCounter:FK 4
- ticketType: ActionCode (1 & 4 & 6 are
Create
, 5 isChange
, 3 必须忽略) - ticketType、profileId、contactPersonId、ownerId、handlingStartTime、handlingEndTime、memo、callWasPreselected、creatorId、creationTS、changerId、changeTS 应该取自
Create
(分组中的第一行) - callState、reasonId、followUpDate、callingAttempts 和 callingAttemptsConsecutivelyNotReached 应该取自最后
Create
一行(然后将是“单行分区”/与上一行相同)或Change
(分区中的最后一行)