Мне нужно обновить 'End_A' в таблице TSW. (SQL Server 2016)
Внешний l oop -> Выбрать Start_a, C_ID из группы dbo.tsw по типу C, упорядочить по start_A des c.
Во внешнем l oop я выбираю первый набор записей Start_A (не нуль)
Inner l oop -> Выберите Up_Date из dbo. tsw сгруппировать по типу C, где CA = «что угодно» и (update> Start_A) сгруппировать по типу C, упорядочить по Up_Date des c.
Во внутреннем l oop Я ищу соответствующий набор записей (группа по типу C), чтобы обновить End_A. Это следующий набор записей Up_Date> Start_a с условием ...
Выберите c_ID из внешнего lopp и обновите End_A с Up_date из внутреннего цикла Обновите End_A с выбранной Up_Date из внутреннего l oop .
Выберите следующий соответствующий набор записей (группа по типу C), чтобы обновить End_A, до конца группы по типу C.
Выберите следующий набор записей из внешнего l oop, затем шаг 2 ....
Всегда группировать по типу C. Тип C - это «блок» для обновления нескольких End_A.
Это обновление таблицы (пример):
C_ID|TypeC| CA | Up_Date | Start_A | End_A |
----------------------------------------------------------------
14 |123 | AA |2019-01-05 02:15:00|2019-01-03 | |
24 |678 | AA |2019-02-05 08:00:05| | |
12 |123 | AA |2019-01-07 03:27:12| | |
19 |123 | BB |2019-03-05 |2019-05-17 | |
10 |456 | BB |2019-11-05 |2019-10-01 | |
23 |123 | BB |2019-07-05 | | |
8 |123 | BB |2019-01-05 |2019-02-01 | |
7 |678 | BB |2019-01-05 |2020-08-09 | |
1 |678 | BB |2019-01-05 | | |
2 |678 | CC |2020-09-05 |2019-10-14 | |
29 |678 | AA |2020-01-05 |2020-01-05 | |
15 |123 | CC |2019-06-05 | | |
17 |678 | CC |2022-01-05 | | |
55 |123 | CC |2019-09-05 | | |
77 |678 | CC |2019-01-05 | | |
47 |678 | AA |2019-01-05 | | |
110 |456 | BC |2019-11-05 | | |
Start Loop_1
select TSW.Start where start_A is not null
from TSW
group by TypeC
Start Loop_2 --(Up_Date next emyty End_A with 'Up_Date')
Update TSW.End_a = Loop_2_End_A
select Up_Date
from
where TSW.Start_A is not null
and "Loop_1 TypeC" = "Loop_2 TypeC"
and CA = "blabla" as Loop_2_End_A
order by up_date
group by TypeC
then select next relevant Up_Date from Loop_2
end loop2
select next from Loop_1
end loop_1
- C_ID 14 -> от следующего типа C '123', где CA <> 'AA' (C_ID = 19)
- C_ID 19 -> от следующего типа C '123', где CA < > 'BB' (C_ID = 15)
- C_ID 10 -> от следующего типа C '456', где CA <> 'BB' (C_ID = 110)
- C_ID 8 - -> от следующего типа C '123', где CA <> 'BB' (C_ID = 15)
- C_ID 7 -> от следующего типа C '678', где CA <> 'BB' (C_ID = 17)
Это таблица после обновления:
C_ID|TypeC| CA | Up_Date | Start_A | End_A |
--------------------------------------------------------------------
14 |123 | AA |2019-01-05 02:15:00|2019-01-03 |2019-03-05|
24 |678 | AA |2019-02-05 08:00:05| | |
12 |123 | AA |2019-01-07 03:27:12| | |
19 |123 | BB |2019-03-05 |2019-05-17 |2019-06-05|
10 |456 | BB |2019-11-05 |2019-10-01 |2019-11-05|
23 |123 | BB |2019-07-05 | | |
8 |123 | XX |2019-01-05 |2019-02-01 |2019-06-05|
7 |678 | BB |2019-01-05 |2020-08-09 |2020-09-05|
1 |678 | BB |2019-01-05 | | |
2 |678 | CC |2020-09-05 |2019-10-14 |2021-05-01|
29 |678 | AA |2020-01-05 |2020-01-05 |2022-01-05|
15 |123 | CC |2019-06-05 | | |
17 |678 | CC |2022-01-05 | | |
55 |123 | CC |2019-09-05 | | |
77 |678 | CC |2019-01-05 | | |
47 |678 | AA |2019-01-05 | | |
110 |456 | BC |2019-11-05 | | |
Как мне обновить SQL таблицу с этой выбранной информацией во внутреннем l oop? Заранее спасибо.