Sql server 如何将自引用复杂游标转换为更高效的SQL代码?CTE、交叉应用或其他什么?
我有以下简化的表结构。实际上,Slot将是identity,表是在前面几行新生成的,所以该列没有间隙Sql server 如何将自引用复杂游标转换为更高效的SQL代码?CTE、交叉应用或其他什么?,sql-server,cursor,common-table-expression,cross-apply,Sql Server,Cursor,Common Table Expression,Cross Apply,我有以下简化的表结构。实际上,Slot将是identity,表是在前面几行新生成的,所以该列没有间隙 Slot SlotGroup EventNum ScheduleGroup 55 55 18 6 56 55 19 7 57 57 13 6 58 57 14 7 59 57
Slot SlotGroup EventNum ScheduleGroup
55 55 18 6
56 55 19 7
57 57 13 6
58 57 14 7
59 57 15 7
60 57 15 7
61 57 17 7
62 57 17 7
63 63 16 7
64 63 16 7
65 65 15 6
66 65 15 6
我需要检查MyTable中的每条记录,并检查是否所有具有较小插槽的记录(在同一插槽组中)具有相同的ScheduleGroup但不同的EventNum:如果是这样,我应该更新同一插槽组中当前插槽上方的插槽。
结果表应包含:
Slot SlotGroup EventNum ScheduleGroup
...
59 59 15 7
60 59 15 7
61 61 17 7
62 61 17 7
...
63 63 16 7
64 63 16 7
...
因为在这两个slotgroup中,前一行具有相同的ScheduleGroup但不同的EventNum
我在考虑CTE或交叉申请,但现在我不知道如何开始;你能帮我找到正确的解决办法吗
目前我使用的代码是这样的,但MyTable中可能有数百行代码,我觉得这不是解决这个问题的最有效方法
数据:
代码:
结果1
资料来源2
结果2
--编辑2--
应转换的其他数据集
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
8 8 1 978 8
9 8 2 978 9
10 8 2 977 9
11 8 2 977 9
12 8 1 977 12
13 8 2 978 12
14 8 1 978 14
15 8 2 978 15
16 8 1 978 16
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
17 17 1 331 17
18 17 1 331 17
19 17 1 331 17
20 17 1 331 17
21 17 1 331 17
22 17 1 331 17
23 17 1 331 17
24 17 1 330 17
25 17 1 330 17
26 17 1 330 17
27 17 1 330 17
28 17 1 330 17
29 17 1 330 17
30 17 1 330 17
31 17 2 330 31
32 17 2 330 31
33 17 2 330 31
34 17 2 330 31
35 17 2 330 31
36 17 2 330 31
37 17 2 330 31
38 17 2 331 31
39 17 2 331 31
40 17 2 331 31
41 17 2 331 31
42 17 2 331 31
43 17 2 331 31
44 17 2 331 31
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
32 32 2 492 32
33 32 6 492 33
34 32 5 492 34
35 32 6 492 35
36 32 6 492 35
37 32 6 492 35
38 32 6 493 35
39 32 6 492 35
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
219 219 18 065 219
220 219 16 065 220
221 219 1 246 220
222 219 16 065 220
223 219 18 065 223
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
39 39 10 113 39
40 39 9 113 40
41 39 10 112 40
42 39 9 112 42
43 39 1 241 42
44 39 2 241 44
45 39 2 241 44
46 39 1 241 46
47 39 1 241 46
48 39 2 241 48
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
46 46 14 184 46
47 46 14 183 46
48 46 14 183 46
49 46 1 184 49
50 46 15 183 49
51 46 15 183 49
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
148 148 6 725 148
149 148 5 725 149
150 148 5 725 149
151 148 6 725 151
152 148 6 723 151
153 148 6 724 151
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
150 150 2 221 150
151 150 1 221 151
152 150 2 221 152
153 150 2 221 152
154 150 1 222 152
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
122 122 3 462 122
123 122 2 462 123
124 122 2 463 123
125 122 2 463 123
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
36 36 10 617 36
37 36 9 617 37
38 36 10 618 37
39 36 9 618 39
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
97 97 22 091 97
98 97 22 091 97
99 97 21 091 99
100 97 22 091 100
101 97 14 092 100
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
108 108 22 463 108
109 108 23 460 108
110 108 23 460 108
111 108 22 461 108
112 108 22 461 108
113 113 21 462 113
114 113 21 462 113
115 113 22 463 113
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
156 156 11 462 156
157 156 10 462 157
158 156 10 463 157
159 156 10 463 157
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
20 20 8 283 20
21 21 7 283 21
22 22 9 283 22
23 23 8 283 23
24 24 11 283 24
25 25 10 283 25
26 26 12 283 26
27 26 11 283 27
28 26 4 282 27
29 26 4 282 27
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
105 105 2 418 105
106 106 1 418 106
107 106 1 418 106
108 108 2 418 108
109 106 1 418 109
110 106 1 418 109
111 108 2 418 111
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
57 57 13 776 57
58 57 14 777 57
59 57 15 777 59
60 57 15 777 59
61 61 14 776 61
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
9 9 3 771 9
10 9 3 771 9
11 9 3 771 9
12 9 3 771 9
13 9 1 772 9
14 9 1 772 9
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
81 81 21 267 81
82 81 22 267 82
83 81 21 267 83
84 81 21 267 83
85 85 22 267 85
86 85 22 267 85
87 85 21 267 87
使用lead()
和lag()
完整结果如下:
+---------+------+-----------+----------+---------------+-------------------+----------+
| TestSet | slot | slotgroup | eventnum | schedulegroup | expectedslotgroup | conflict |
+---------+------+-----------+----------+---------------+-------------------+----------+
| 1 | 8 | 8 | 1 | 978 | 8 | |
| 1 | 9 | 9 | 2 | 978 | 9 | |
| 1 | 10 | 9 | 2 | 977 | 9 | |
| 1 | 11 | 9 | 2 | 977 | 9 | |
| 1 | 12 | 12 | 1 | 977 | 12 | |
| 1 | 13 | 12 | 2 | 978 | 12 | |
| 1 | 14 | 14 | 1 | 978 | 14 | |
| 1 | 15 | 15 | 2 | 978 | 15 | |
| 1 | 16 | 16 | 1 | 978 | 16 | |
| 2 | 17 | 17 | 1 | 331 | 17 | |
| 2 | 18 | 17 | 1 | 331 | 17 | |
| 2 | 19 | 17 | 1 | 331 | 17 | |
| 2 | 20 | 17 | 1 | 331 | 17 | |
| 2 | 21 | 17 | 1 | 331 | 17 | |
| 2 | 22 | 17 | 1 | 331 | 17 | |
| 2 | 23 | 17 | 1 | 331 | 17 | |
| 2 | 24 | 17 | 1 | 330 | 17 | |
| 2 | 25 | 17 | 1 | 330 | 17 | |
| 2 | 26 | 17 | 1 | 330 | 17 | |
| 2 | 27 | 17 | 1 | 330 | 17 | |
| 2 | 28 | 17 | 1 | 330 | 17 | |
| 2 | 29 | 17 | 1 | 330 | 17 | |
| 2 | 30 | 17 | 1 | 330 | 17 | |
| 2 | 31 | 31 | 2 | 330 | 31 | |
| 2 | 32 | 31 | 2 | 330 | 31 | |
| 2 | 33 | 31 | 2 | 330 | 31 | |
| 2 | 34 | 31 | 2 | 330 | 31 | |
| 2 | 35 | 31 | 2 | 330 | 31 | |
| 2 | 36 | 31 | 2 | 330 | 31 | |
| 2 | 37 | 31 | 2 | 330 | 31 | |
| 2 | 38 | 31 | 2 | 331 | 31 | |
| 2 | 39 | 31 | 2 | 331 | 31 | |
| 2 | 40 | 31 | 2 | 331 | 31 | |
| 2 | 41 | 31 | 2 | 331 | 31 | |
| 2 | 42 | 31 | 2 | 331 | 31 | |
| 2 | 43 | 31 | 2 | 331 | 31 | |
| 2 | 44 | 31 | 2 | 331 | 31 | |
| 3 | 32 | 32 | 2 | 492 | 32 | |
| 3 | 33 | 33 | 6 | 492 | 33 | |
| 3 | 34 | 34 | 5 | 492 | 34 | |
| 3 | 35 | 35 | 6 | 492 | 35 | |
| 3 | 36 | 35 | 6 | 492 | 35 | |
| 3 | 37 | 35 | 6 | 492 | 35 | |
| 3 | 38 | 35 | 6 | 493 | 35 | |
| 3 | 39 | 35 | 6 | 492 | 35 | |
| 4 | 219 | 219 | 18 | 65 | 219 | |
| 4 | 220 | 220 | 16 | 65 | 220 | |
| 4 | 221 | 220 | 1 | 246 | 220 | |
| 4 | 222 | 220 | 16 | 65 | 220 | |
| 4 | 223 | 223 | 18 | 65 | 223 | |
| 5 | 39 | 39 | 10 | 113 | 39 | |
| 5 | 40 | 40 | 9 | 113 | 40 | |
| 5 | 41 | 40 | 10 | 112 | 40 | |
| 5 | 42 | 42 | 9 | 112 | 42 | |
| 5 | 43 | 42 | 1 | 241 | 42 | |
| 5 | 44 | 44 | 2 | 241 | 44 | |
| 5 | 45 | 44 | 2 | 241 | 44 | |
| 5 | 46 | 46 | 1 | 241 | 46 | |
| 5 | 47 | 46 | 1 | 241 | 46 | |
| 5 | 48 | 48 | 2 | 241 | 48 | |
| 6 | 46 | 46 | 14 | 184 | 46 | |
| 6 | 47 | 46 | 14 | 183 | 46 | |
| 6 | 48 | 46 | 14 | 183 | 46 | |
| 6 | 49 | 46 | 1 | 184 | 49 | X |
| 6 | 50 | 46 | 15 | 183 | 49 | X |
| 6 | 51 | 46 | 15 | 183 | 49 | X |
| 7 | 148 | 148 | 6 | 725 | 148 | |
| 7 | 149 | 149 | 5 | 725 | 149 | |
| 7 | 150 | 149 | 5 | 725 | 149 | |
| 7 | 151 | 151 | 6 | 725 | 151 | |
| 7 | 152 | 151 | 6 | 723 | 151 | |
| 7 | 153 | 151 | 6 | 724 | 151 | |
| 8 | 150 | 150 | 2 | 221 | 150 | |
| 8 | 151 | 151 | 1 | 221 | 151 | |
| 8 | 152 | 152 | 2 | 221 | 152 | |
| 8 | 153 | 152 | 2 | 221 | 152 | |
| 8 | 154 | 152 | 1 | 222 | 152 | |
| 9 | 122 | 122 | 3 | 462 | 122 | |
| 9 | 123 | 123 | 2 | 462 | 123 | |
| 9 | 124 | 123 | 2 | 463 | 123 | |
| 9 | 125 | 123 | 2 | 463 | 123 | |
| 10 | 36 | 36 | 10 | 617 | 36 | |
| 10 | 37 | 37 | 9 | 617 | 37 | |
| 10 | 38 | 37 | 10 | 618 | 37 | |
| 10 | 39 | 39 | 9 | 618 | 39 | |
| 11 | 97 | 97 | 22 | 91 | 97 | |
| 11 | 98 | 97 | 22 | 91 | 97 | |
| 11 | 99 | 99 | 21 | 91 | 99 | |
| 11 | 100 | 100 | 22 | 91 | 100 | |
| 11 | 101 | 100 | 14 | 92 | 100 | |
| 12 | 108 | 108 | 22 | 463 | 108 | |
| 12 | 109 | 108 | 23 | 460 | 108 | |
| 12 | 110 | 108 | 23 | 460 | 108 | |
| 12 | 111 | 108 | 22 | 461 | 108 | |
| 12 | 112 | 108 | 22 | 461 | 108 | |
| 12 | 113 | 113 | 21 | 462 | 113 | |
| 12 | 114 | 113 | 21 | 462 | 113 | |
| 12 | 115 | 113 | 22 | 463 | 113 | |
| 13 | 156 | 156 | 11 | 462 | 156 | |
| 13 | 157 | 157 | 10 | 462 | 157 | |
| 13 | 158 | 157 | 10 | 463 | 157 | |
| 13 | 159 | 157 | 10 | 463 | 157 | |
| 14 | 20 | 20 | 8 | 283 | 20 | |
| 14 | 21 | 21 | 7 | 283 | 21 | |
| 14 | 22 | 22 | 9 | 283 | 22 | |
| 14 | 23 | 23 | 8 | 283 | 23 | |
| 14 | 24 | 24 | 11 | 283 | 24 | |
| 14 | 25 | 25 | 10 | 283 | 25 | |
| 14 | 26 | 26 | 12 | 283 | 26 | |
| 14 | 27 | 27 | 11 | 283 | 27 | |
| 14 | 28 | 27 | 4 | 282 | 27 | |
| 14 | 29 | 27 | 4 | 282 | 27 | |
| 15 | 105 | 105 | 2 | 418 | 105 | |
| 15 | 106 | 106 | 1 | 418 | 106 | |
| 15 | 107 | 106 | 1 | 418 | 106 | |
| 15 | 108 | 108 | 2 | 418 | 108 | |
| 15 | 109 | 109 | 1 | 418 | 109 | |
| 15 | 110 | 109 | 1 | 418 | 109 | |
| 15 | 111 | 111 | 2 | 418 | 111 | |
| 16 | 57 | 57 | 13 | 776 | 57 | |
| 16 | 58 | 57 | 14 | 777 | 57 | |
| 16 | 59 | 59 | 15 | 777 | 59 | |
| 16 | 60 | 59 | 15 | 777 | 59 | |
| 16 | 61 | 61 | 14 | 776 | 61 | |
| 17 | 9 | 9 | 3 | 771 | 9 | |
| 17 | 10 | 9 | 3 | 771 | 9 | |
| 17 | 11 | 9 | 3 | 771 | 9 | |
| 17 | 12 | 9 | 3 | 771 | 9 | |
| 17 | 13 | 9 | 1 | 772 | 9 | |
| 17 | 14 | 9 | 1 | 772 | 9 | |
| 18 | 81 | 81 | 21 | 267 | 81 | |
| 18 | 82 | 82 | 22 | 267 | 82 | |
| 18 | 83 | 83 | 21 | 267 | 83 | |
| 18 | 84 | 83 | 21 | 267 | 83 | |
| 18 | 85 | 85 | 22 | 267 | 85 | |
| 18 | 86 | 85 | 22 | 267 | 85 | |
| 18 | 87 | 87 | 21 | 267 | 87 | |
+---------+------+-----------+----------+---------------+-------------------+----------+
使用lead()
和lag()
完整结果如下:
+---------+------+-----------+----------+---------------+-------------------+----------+
| TestSet | slot | slotgroup | eventnum | schedulegroup | expectedslotgroup | conflict |
+---------+------+-----------+----------+---------------+-------------------+----------+
| 1 | 8 | 8 | 1 | 978 | 8 | |
| 1 | 9 | 9 | 2 | 978 | 9 | |
| 1 | 10 | 9 | 2 | 977 | 9 | |
| 1 | 11 | 9 | 2 | 977 | 9 | |
| 1 | 12 | 12 | 1 | 977 | 12 | |
| 1 | 13 | 12 | 2 | 978 | 12 | |
| 1 | 14 | 14 | 1 | 978 | 14 | |
| 1 | 15 | 15 | 2 | 978 | 15 | |
| 1 | 16 | 16 | 1 | 978 | 16 | |
| 2 | 17 | 17 | 1 | 331 | 17 | |
| 2 | 18 | 17 | 1 | 331 | 17 | |
| 2 | 19 | 17 | 1 | 331 | 17 | |
| 2 | 20 | 17 | 1 | 331 | 17 | |
| 2 | 21 | 17 | 1 | 331 | 17 | |
| 2 | 22 | 17 | 1 | 331 | 17 | |
| 2 | 23 | 17 | 1 | 331 | 17 | |
| 2 | 24 | 17 | 1 | 330 | 17 | |
| 2 | 25 | 17 | 1 | 330 | 17 | |
| 2 | 26 | 17 | 1 | 330 | 17 | |
| 2 | 27 | 17 | 1 | 330 | 17 | |
| 2 | 28 | 17 | 1 | 330 | 17 | |
| 2 | 29 | 17 | 1 | 330 | 17 | |
| 2 | 30 | 17 | 1 | 330 | 17 | |
| 2 | 31 | 31 | 2 | 330 | 31 | |
| 2 | 32 | 31 | 2 | 330 | 31 | |
| 2 | 33 | 31 | 2 | 330 | 31 | |
| 2 | 34 | 31 | 2 | 330 | 31 | |
| 2 | 35 | 31 | 2 | 330 | 31 | |
| 2 | 36 | 31 | 2 | 330 | 31 | |
| 2 | 37 | 31 | 2 | 330 | 31 | |
| 2 | 38 | 31 | 2 | 331 | 31 | |
| 2 | 39 | 31 | 2 | 331 | 31 | |
| 2 | 40 | 31 | 2 | 331 | 31 | |
| 2 | 41 | 31 | 2 | 331 | 31 | |
| 2 | 42 | 31 | 2 | 331 | 31 | |
| 2 | 43 | 31 | 2 | 331 | 31 | |
| 2 | 44 | 31 | 2 | 331 | 31 | |
| 3 | 32 | 32 | 2 | 492 | 32 | |
| 3 | 33 | 33 | 6 | 492 | 33 | |
| 3 | 34 | 34 | 5 | 492 | 34 | |
| 3 | 35 | 35 | 6 | 492 | 35 | |
| 3 | 36 | 35 | 6 | 492 | 35 | |
| 3 | 37 | 35 | 6 | 492 | 35 | |
| 3 | 38 | 35 | 6 | 493 | 35 | |
| 3 | 39 | 35 | 6 | 492 | 35 | |
| 4 | 219 | 219 | 18 | 65 | 219 | |
| 4 | 220 | 220 | 16 | 65 | 220 | |
| 4 | 221 | 220 | 1 | 246 | 220 | |
| 4 | 222 | 220 | 16 | 65 | 220 | |
| 4 | 223 | 223 | 18 | 65 | 223 | |
| 5 | 39 | 39 | 10 | 113 | 39 | |
| 5 | 40 | 40 | 9 | 113 | 40 | |
| 5 | 41 | 40 | 10 | 112 | 40 | |
| 5 | 42 | 42 | 9 | 112 | 42 | |
| 5 | 43 | 42 | 1 | 241 | 42 | |
| 5 | 44 | 44 | 2 | 241 | 44 | |
| 5 | 45 | 44 | 2 | 241 | 44 | |
| 5 | 46 | 46 | 1 | 241 | 46 | |
| 5 | 47 | 46 | 1 | 241 | 46 | |
| 5 | 48 | 48 | 2 | 241 | 48 | |
| 6 | 46 | 46 | 14 | 184 | 46 | |
| 6 | 47 | 46 | 14 | 183 | 46 | |
| 6 | 48 | 46 | 14 | 183 | 46 | |
| 6 | 49 | 46 | 1 | 184 | 49 | X |
| 6 | 50 | 46 | 15 | 183 | 49 | X |
| 6 | 51 | 46 | 15 | 183 | 49 | X |
| 7 | 148 | 148 | 6 | 725 | 148 | |
| 7 | 149 | 149 | 5 | 725 | 149 | |
| 7 | 150 | 149 | 5 | 725 | 149 | |
| 7 | 151 | 151 | 6 | 725 | 151 | |
| 7 | 152 | 151 | 6 | 723 | 151 | |
| 7 | 153 | 151 | 6 | 724 | 151 | |
| 8 | 150 | 150 | 2 | 221 | 150 | |
| 8 | 151 | 151 | 1 | 221 | 151 | |
| 8 | 152 | 152 | 2 | 221 | 152 | |
| 8 | 153 | 152 | 2 | 221 | 152 | |
| 8 | 154 | 152 | 1 | 222 | 152 | |
| 9 | 122 | 122 | 3 | 462 | 122 | |
| 9 | 123 | 123 | 2 | 462 | 123 | |
| 9 | 124 | 123 | 2 | 463 | 123 | |
| 9 | 125 | 123 | 2 | 463 | 123 | |
| 10 | 36 | 36 | 10 | 617 | 36 | |
| 10 | 37 | 37 | 9 | 617 | 37 | |
| 10 | 38 | 37 | 10 | 618 | 37 | |
| 10 | 39 | 39 | 9 | 618 | 39 | |
| 11 | 97 | 97 | 22 | 91 | 97 | |
| 11 | 98 | 97 | 22 | 91 | 97 | |
| 11 | 99 | 99 | 21 | 91 | 99 | |
| 11 | 100 | 100 | 22 | 91 | 100 | |
| 11 | 101 | 100 | 14 | 92 | 100 | |
| 12 | 108 | 108 | 22 | 463 | 108 | |
| 12 | 109 | 108 | 23 | 460 | 108 | |
| 12 | 110 | 108 | 23 | 460 | 108 | |
| 12 | 111 | 108 | 22 | 461 | 108 | |
| 12 | 112 | 108 | 22 | 461 | 108 | |
| 12 | 113 | 113 | 21 | 462 | 113 | |
| 12 | 114 | 113 | 21 | 462 | 113 | |
| 12 | 115 | 113 | 22 | 463 | 113 | |
| 13 | 156 | 156 | 11 | 462 | 156 | |
| 13 | 157 | 157 | 10 | 462 | 157 | |
| 13 | 158 | 157 | 10 | 463 | 157 | |
| 13 | 159 | 157 | 10 | 463 | 157 | |
| 14 | 20 | 20 | 8 | 283 | 20 | |
| 14 | 21 | 21 | 7 | 283 | 21 | |
| 14 | 22 | 22 | 9 | 283 | 22 | |
| 14 | 23 | 23 | 8 | 283 | 23 | |
| 14 | 24 | 24 | 11 | 283 | 24 | |
| 14 | 25 | 25 | 10 | 283 | 25 | |
| 14 | 26 | 26 | 12 | 283 | 26 | |
| 14 | 27 | 27 | 11 | 283 | 27 | |
| 14 | 28 | 27 | 4 | 282 | 27 | |
| 14 | 29 | 27 | 4 | 282 | 27 | |
| 15 | 105 | 105 | 2 | 418 | 105 | |
| 15 | 106 | 106 | 1 | 418 | 106 | |
| 15 | 107 | 106 | 1 | 418 | 106 | |
| 15 | 108 | 108 | 2 | 418 | 108 | |
| 15 | 109 | 109 | 1 | 418 | 109 | |
| 15 | 110 | 109 | 1 | 418 | 109 | |
| 15 | 111 | 111 | 2 | 418 | 111 | |
| 16 | 57 | 57 | 13 | 776 | 57 | |
| 16 | 58 | 57 | 14 | 777 | 57 | |
| 16 | 59 | 59 | 15 | 777 | 59 | |
| 16 | 60 | 59 | 15 | 777 | 59 | |
| 16 | 61 | 61 | 14 | 776 | 61 | |
| 17 | 9 | 9 | 3 | 771 | 9 | |
| 17 | 10 | 9 | 3 | 771 | 9 | |
| 17 | 11 | 9 | 3 | 771 | 9 | |
| 17 | 12 | 9 | 3 | 771 | 9 | |
| 17 | 13 | 9 | 1 | 772 | 9 | |
| 17 | 14 | 9 | 1 | 772 | 9 | |
| 18 | 81 | 81 | 21 | 267 | 81 | |
| 18 | 82 | 82 | 22 | 267 | 82 | |
| 18 | 83 | 83 | 21 | 267 | 83 | |
| 18 | 84 | 83 | 21 | 267 | 83 | |
| 18 | 85 | 85 | 22 | 267 | 85 | |
| 18 | 86 | 85 | 22 | 267 | 85 | |
| 18 | 87 | 87 | 21 | 267 | 87 | |
+---------+------+-----------+----------+---------------+-------------------+----------+
在这里发布ddl和示例数据怎么样?否则没人能真正帮上什么忙。@SeanLange不幸的是,这就是我所能得到的,因为我正试图制作一些旧的继承代码来执行更好的性能。有什么原因插槽组总是奇怪的吗?或者,当您更新时,您将增加2?@SqlZim它只是完整数据的一个子集,我也出现过偶数次,所以不要依赖于此:)@SqlZim SOURCE 1我可以使用您的代码解决问题,并将“or NewSlotGroup!=slotgroup”添加到最后一个WHERE条件,在这里发布ddl和示例数据如何?否则没人能真正帮上什么忙。@SeanLange不幸的是,这就是我所能得到的,因为我正试图制作一些旧的继承代码来执行更好的性能。有什么原因插槽组总是奇怪的吗?或者,当您更新时,您将增加2?@SqlZim它只是完整数据的一个子集,我也出现过偶数,所以不要依赖于此:)@SqlZim SOURCE 1我可以使用您的代码解决问题,并在最后添加“或NewSlotGroup!=slotgroup”,谢谢,非常有趣,但有一个明显的小错误:插槽59和60应该有插槽组59,而不是58,插槽63和64也是如此。此外,它在更复杂的情况下失败(在同一慢组中多次跳跃)。这似乎是我一直在寻找的正确方向,让我们看看是否能让它完美地工作:)@Simone更新了我的答案,谢谢你的澄清。我仍在努力,不幸的是,你的解决方案并不完全正确;至少有两种组合仍然存在问题;请检查我编辑的问题对不起,但我担心它不正确:插槽42仍然有插槽组39,而我的要求是将其作为42。我遗漏了什么吗?我遵循了你的提示,但仍然有一些极端情况:(,添加了他们,谢谢,非常有趣,但有一个小的明显错误:插槽59和60应该有插槽组59,而不是58,插槽63和64也是如此。此外,它在更复杂的情况下失败(在同一个插槽组中多次跳转)。这似乎是我一直在寻找的正确方向,让我们看看是否能让它完美运行:)@Simone更新了我的答案,感谢您的澄清。我仍在努力,但不幸的是,您的解决方案并不完全正确;至少有两种组合仍然存在问题;请检查我编辑的问题对不起,但我担心它不正确:插槽42仍然有插槽组39,而我的要求是将其作为42。我是不是遗漏了什么?我按照你的建议做了,但还是有一些小案例:(,补充道
Slot SlotGroup EventNum ScheduleGroup
...
19 19 9 778
20 19 9 778
Slot SlotGroup EventNum ScheduleGroup
39 39 10 778
40 39 10 778
41 39 9 778
42 39 10 778
Slot SlotGroup EventNum ScheduleGroup
39 39 10 778
40 39 10 778
41 41 9 778
42 42 10 778
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
8 8 1 978 8
9 8 2 978 9
10 8 2 977 9
11 8 2 977 9
12 8 1 977 12
13 8 2 978 12
14 8 1 978 14
15 8 2 978 15
16 8 1 978 16
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
17 17 1 331 17
18 17 1 331 17
19 17 1 331 17
20 17 1 331 17
21 17 1 331 17
22 17 1 331 17
23 17 1 331 17
24 17 1 330 17
25 17 1 330 17
26 17 1 330 17
27 17 1 330 17
28 17 1 330 17
29 17 1 330 17
30 17 1 330 17
31 17 2 330 31
32 17 2 330 31
33 17 2 330 31
34 17 2 330 31
35 17 2 330 31
36 17 2 330 31
37 17 2 330 31
38 17 2 331 31
39 17 2 331 31
40 17 2 331 31
41 17 2 331 31
42 17 2 331 31
43 17 2 331 31
44 17 2 331 31
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
32 32 2 492 32
33 32 6 492 33
34 32 5 492 34
35 32 6 492 35
36 32 6 492 35
37 32 6 492 35
38 32 6 493 35
39 32 6 492 35
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
219 219 18 065 219
220 219 16 065 220
221 219 1 246 220
222 219 16 065 220
223 219 18 065 223
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
39 39 10 113 39
40 39 9 113 40
41 39 10 112 40
42 39 9 112 42
43 39 1 241 42
44 39 2 241 44
45 39 2 241 44
46 39 1 241 46
47 39 1 241 46
48 39 2 241 48
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
46 46 14 184 46
47 46 14 183 46
48 46 14 183 46
49 46 1 184 49
50 46 15 183 49
51 46 15 183 49
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
148 148 6 725 148
149 148 5 725 149
150 148 5 725 149
151 148 6 725 151
152 148 6 723 151
153 148 6 724 151
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
150 150 2 221 150
151 150 1 221 151
152 150 2 221 152
153 150 2 221 152
154 150 1 222 152
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
122 122 3 462 122
123 122 2 462 123
124 122 2 463 123
125 122 2 463 123
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
36 36 10 617 36
37 36 9 617 37
38 36 10 618 37
39 36 9 618 39
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
97 97 22 091 97
98 97 22 091 97
99 97 21 091 99
100 97 22 091 100
101 97 14 092 100
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
108 108 22 463 108
109 108 23 460 108
110 108 23 460 108
111 108 22 461 108
112 108 22 461 108
113 113 21 462 113
114 113 21 462 113
115 113 22 463 113
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
156 156 11 462 156
157 156 10 462 157
158 156 10 463 157
159 156 10 463 157
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
20 20 8 283 20
21 21 7 283 21
22 22 9 283 22
23 23 8 283 23
24 24 11 283 24
25 25 10 283 25
26 26 12 283 26
27 26 11 283 27
28 26 4 282 27
29 26 4 282 27
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
105 105 2 418 105
106 106 1 418 106
107 106 1 418 106
108 108 2 418 108
109 106 1 418 109
110 106 1 418 109
111 108 2 418 111
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
57 57 13 776 57
58 57 14 777 57
59 57 15 777 59
60 57 15 777 59
61 61 14 776 61
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
9 9 3 771 9
10 9 3 771 9
11 9 3 771 9
12 9 3 771 9
13 9 1 772 9
14 9 1 772 9
Slot SlotGroup EventNum ScheduleGroup ExpectedSlotGroup
81 81 21 267 81
82 81 22 267 82
83 81 21 267 83
84 81 21 267 83
85 85 22 267 85
86 85 22 267 85
87 85 21 267 87
;with cte as (
select *
, NewSlotGroup = min(slot) over (partition by testset, grp)
from (
select *, grp = sum(sgrp) over (partition by testset order by slot)
from (
select *, sgrp = case
when lag(eventnum) over (partition by testset order by slot) = eventnum
then 0
when lag(eventnum) over (partition by testset, slotgroup order by slot) <> eventnum
and lag(schedulegroup) over (partition by testset, slotgroup order by slot) <> schedulegroup
then 0
else 1
end
from t
) s
) g
)
update cte
set SlotGroup = NewSlotGroup
where SlotGroup != NewSlotGroup;
+---------+------+-----------+----------+---------------+-------------------+----------+
| TestSet | slot | slotgroup | eventnum | schedulegroup | expectedslotgroup | conflict |
+---------+------+-----------+----------+---------------+-------------------+----------+
| 6 | 46 | 46 | 14 | 184 | 46 | |
| 6 | 47 | 46 | 14 | 183 | 46 | |
| 6 | 48 | 46 | 14 | 183 | 46 | |
| 6 | 49 | 46 | 1 | 184 | 49 | X |
| 6 | 50 | 46 | 15 | 183 | 49 | X |
| 6 | 51 | 46 | 15 | 183 | 49 | X |
+---------+------+-----------+----------+---------------+-------------------+----------+
+---------+------+-----------+----------+---------------+-------------------+----------+
| TestSet | slot | slotgroup | eventnum | schedulegroup | expectedslotgroup | conflict |
+---------+------+-----------+----------+---------------+-------------------+----------+
| 1 | 8 | 8 | 1 | 978 | 8 | |
| 1 | 9 | 9 | 2 | 978 | 9 | |
| 1 | 10 | 9 | 2 | 977 | 9 | |
| 1 | 11 | 9 | 2 | 977 | 9 | |
| 1 | 12 | 12 | 1 | 977 | 12 | |
| 1 | 13 | 12 | 2 | 978 | 12 | |
| 1 | 14 | 14 | 1 | 978 | 14 | |
| 1 | 15 | 15 | 2 | 978 | 15 | |
| 1 | 16 | 16 | 1 | 978 | 16 | |
| 2 | 17 | 17 | 1 | 331 | 17 | |
| 2 | 18 | 17 | 1 | 331 | 17 | |
| 2 | 19 | 17 | 1 | 331 | 17 | |
| 2 | 20 | 17 | 1 | 331 | 17 | |
| 2 | 21 | 17 | 1 | 331 | 17 | |
| 2 | 22 | 17 | 1 | 331 | 17 | |
| 2 | 23 | 17 | 1 | 331 | 17 | |
| 2 | 24 | 17 | 1 | 330 | 17 | |
| 2 | 25 | 17 | 1 | 330 | 17 | |
| 2 | 26 | 17 | 1 | 330 | 17 | |
| 2 | 27 | 17 | 1 | 330 | 17 | |
| 2 | 28 | 17 | 1 | 330 | 17 | |
| 2 | 29 | 17 | 1 | 330 | 17 | |
| 2 | 30 | 17 | 1 | 330 | 17 | |
| 2 | 31 | 31 | 2 | 330 | 31 | |
| 2 | 32 | 31 | 2 | 330 | 31 | |
| 2 | 33 | 31 | 2 | 330 | 31 | |
| 2 | 34 | 31 | 2 | 330 | 31 | |
| 2 | 35 | 31 | 2 | 330 | 31 | |
| 2 | 36 | 31 | 2 | 330 | 31 | |
| 2 | 37 | 31 | 2 | 330 | 31 | |
| 2 | 38 | 31 | 2 | 331 | 31 | |
| 2 | 39 | 31 | 2 | 331 | 31 | |
| 2 | 40 | 31 | 2 | 331 | 31 | |
| 2 | 41 | 31 | 2 | 331 | 31 | |
| 2 | 42 | 31 | 2 | 331 | 31 | |
| 2 | 43 | 31 | 2 | 331 | 31 | |
| 2 | 44 | 31 | 2 | 331 | 31 | |
| 3 | 32 | 32 | 2 | 492 | 32 | |
| 3 | 33 | 33 | 6 | 492 | 33 | |
| 3 | 34 | 34 | 5 | 492 | 34 | |
| 3 | 35 | 35 | 6 | 492 | 35 | |
| 3 | 36 | 35 | 6 | 492 | 35 | |
| 3 | 37 | 35 | 6 | 492 | 35 | |
| 3 | 38 | 35 | 6 | 493 | 35 | |
| 3 | 39 | 35 | 6 | 492 | 35 | |
| 4 | 219 | 219 | 18 | 65 | 219 | |
| 4 | 220 | 220 | 16 | 65 | 220 | |
| 4 | 221 | 220 | 1 | 246 | 220 | |
| 4 | 222 | 220 | 16 | 65 | 220 | |
| 4 | 223 | 223 | 18 | 65 | 223 | |
| 5 | 39 | 39 | 10 | 113 | 39 | |
| 5 | 40 | 40 | 9 | 113 | 40 | |
| 5 | 41 | 40 | 10 | 112 | 40 | |
| 5 | 42 | 42 | 9 | 112 | 42 | |
| 5 | 43 | 42 | 1 | 241 | 42 | |
| 5 | 44 | 44 | 2 | 241 | 44 | |
| 5 | 45 | 44 | 2 | 241 | 44 | |
| 5 | 46 | 46 | 1 | 241 | 46 | |
| 5 | 47 | 46 | 1 | 241 | 46 | |
| 5 | 48 | 48 | 2 | 241 | 48 | |
| 6 | 46 | 46 | 14 | 184 | 46 | |
| 6 | 47 | 46 | 14 | 183 | 46 | |
| 6 | 48 | 46 | 14 | 183 | 46 | |
| 6 | 49 | 46 | 1 | 184 | 49 | X |
| 6 | 50 | 46 | 15 | 183 | 49 | X |
| 6 | 51 | 46 | 15 | 183 | 49 | X |
| 7 | 148 | 148 | 6 | 725 | 148 | |
| 7 | 149 | 149 | 5 | 725 | 149 | |
| 7 | 150 | 149 | 5 | 725 | 149 | |
| 7 | 151 | 151 | 6 | 725 | 151 | |
| 7 | 152 | 151 | 6 | 723 | 151 | |
| 7 | 153 | 151 | 6 | 724 | 151 | |
| 8 | 150 | 150 | 2 | 221 | 150 | |
| 8 | 151 | 151 | 1 | 221 | 151 | |
| 8 | 152 | 152 | 2 | 221 | 152 | |
| 8 | 153 | 152 | 2 | 221 | 152 | |
| 8 | 154 | 152 | 1 | 222 | 152 | |
| 9 | 122 | 122 | 3 | 462 | 122 | |
| 9 | 123 | 123 | 2 | 462 | 123 | |
| 9 | 124 | 123 | 2 | 463 | 123 | |
| 9 | 125 | 123 | 2 | 463 | 123 | |
| 10 | 36 | 36 | 10 | 617 | 36 | |
| 10 | 37 | 37 | 9 | 617 | 37 | |
| 10 | 38 | 37 | 10 | 618 | 37 | |
| 10 | 39 | 39 | 9 | 618 | 39 | |
| 11 | 97 | 97 | 22 | 91 | 97 | |
| 11 | 98 | 97 | 22 | 91 | 97 | |
| 11 | 99 | 99 | 21 | 91 | 99 | |
| 11 | 100 | 100 | 22 | 91 | 100 | |
| 11 | 101 | 100 | 14 | 92 | 100 | |
| 12 | 108 | 108 | 22 | 463 | 108 | |
| 12 | 109 | 108 | 23 | 460 | 108 | |
| 12 | 110 | 108 | 23 | 460 | 108 | |
| 12 | 111 | 108 | 22 | 461 | 108 | |
| 12 | 112 | 108 | 22 | 461 | 108 | |
| 12 | 113 | 113 | 21 | 462 | 113 | |
| 12 | 114 | 113 | 21 | 462 | 113 | |
| 12 | 115 | 113 | 22 | 463 | 113 | |
| 13 | 156 | 156 | 11 | 462 | 156 | |
| 13 | 157 | 157 | 10 | 462 | 157 | |
| 13 | 158 | 157 | 10 | 463 | 157 | |
| 13 | 159 | 157 | 10 | 463 | 157 | |
| 14 | 20 | 20 | 8 | 283 | 20 | |
| 14 | 21 | 21 | 7 | 283 | 21 | |
| 14 | 22 | 22 | 9 | 283 | 22 | |
| 14 | 23 | 23 | 8 | 283 | 23 | |
| 14 | 24 | 24 | 11 | 283 | 24 | |
| 14 | 25 | 25 | 10 | 283 | 25 | |
| 14 | 26 | 26 | 12 | 283 | 26 | |
| 14 | 27 | 27 | 11 | 283 | 27 | |
| 14 | 28 | 27 | 4 | 282 | 27 | |
| 14 | 29 | 27 | 4 | 282 | 27 | |
| 15 | 105 | 105 | 2 | 418 | 105 | |
| 15 | 106 | 106 | 1 | 418 | 106 | |
| 15 | 107 | 106 | 1 | 418 | 106 | |
| 15 | 108 | 108 | 2 | 418 | 108 | |
| 15 | 109 | 109 | 1 | 418 | 109 | |
| 15 | 110 | 109 | 1 | 418 | 109 | |
| 15 | 111 | 111 | 2 | 418 | 111 | |
| 16 | 57 | 57 | 13 | 776 | 57 | |
| 16 | 58 | 57 | 14 | 777 | 57 | |
| 16 | 59 | 59 | 15 | 777 | 59 | |
| 16 | 60 | 59 | 15 | 777 | 59 | |
| 16 | 61 | 61 | 14 | 776 | 61 | |
| 17 | 9 | 9 | 3 | 771 | 9 | |
| 17 | 10 | 9 | 3 | 771 | 9 | |
| 17 | 11 | 9 | 3 | 771 | 9 | |
| 17 | 12 | 9 | 3 | 771 | 9 | |
| 17 | 13 | 9 | 1 | 772 | 9 | |
| 17 | 14 | 9 | 1 | 772 | 9 | |
| 18 | 81 | 81 | 21 | 267 | 81 | |
| 18 | 82 | 82 | 22 | 267 | 82 | |
| 18 | 83 | 83 | 21 | 267 | 83 | |
| 18 | 84 | 83 | 21 | 267 | 83 | |
| 18 | 85 | 85 | 22 | 267 | 85 | |
| 18 | 86 | 85 | 22 | 267 | 85 | |
| 18 | 87 | 87 | 21 | 267 | 87 | |
+---------+------+-----------+----------+---------------+-------------------+----------+