Я пытаюсь собрать сценарий для обновления столбца ActionTypeID на основе конкретного потока областей для каждого идентификатора посещения.
Существует три области, и посещение может перемещаться между любой из областей и Мне нужно обновить столбец ActionTypeID на основе 5 значений в таблице ActionType.
Лог c для обновления полностью основывается на столбце Area для каждой записи VisitID, где вы можете видеть, как VisitID 100 перемещается из области 1 в 2 в 3. В то время как запись VisitID 101 перемещается из области 1 в 2 и затем обратно к 1 и вперед к 2, а затем к 3. Пожалуйста, смотрите столбец "WhatActionTypeShouldBe".
Какой хороший способ обновить этот столбец для того, что может составить миллионы строк и все виды записей движения по районам?
Пример данных
Create Table #SampleData
(
VisitID int,
StartDate datetime,
EndDate datetime,
Area tinyint,
ActionTypeID tinyint,
WhatActionTypeShouldBe tinyint
)
insert into #SampleData
(
VisitID,
StartDate,
EndDate,
Area,
ActionTypeID,
WhatActionTypeShouldBe
)
select
100,
'2020-01-26 00:16:09.800',
'2020-01-26 00:18:09.800',
1,
0,
1
union
select
100,
'2020-01-26 00:18:09.800',
'2020-01-26 00:21:09.800',
2,
0,
2
union
select
100,
'2020-01-26 00:21:09.800',
'2020-01-26 00:27:09.800',
3,
0,
3
union
select
101,
'2020-01-26 00:16:09.800',
'2020-01-26 00:18:09.800',
1,
0,
1
union
select
101,
'2020-01-26 00:18:09.800',
'2020-01-26 00:21:09.800',
2,
0,
2
union
select
101,
'2020-01-26 00:21:09.800',
'2020-01-26 00:24:09.800',
1,
0,
4
union
select
101,
'2020-01-26 00:24:09.800',
'2020-01-26 00:27:09.800',
2,
0,
2
union
select
101,
'2020-01-26 00:27:09.800',
'2020-01-26 00:30:09.800',
3,
0,
3
union
select
102,
'2020-01-26 00:24:09.800',
'2020-01-26 00:27:09.800',
2,
0,
2
union
select
102,
'2020-01-26 00:27:09.800',
'2020-01-26 00:30:09.800',
3,
0,
3
union
select
103,
'2020-01-26 00:24:09.800',
'2020-01-26 00:27:09.800',
1,
0,
1
union
select
103,
'2020-01-26 00:27:09.800',
'2020-01-26 00:30:09.800',
2,
0,
2
union
select
103,
'2020-01-26 00:30:09.800',
'2020-01-26 00:34:09.800',
3,
0,
3
union
select
103,
'2020-01-26 00:34:09.800',
'2020-01-26 00:36:09.800',
2,
0,
5
union
select
103,
'2020-01-26 00:36:09.800',
'2020-01-26 00:37:09.800',
3,
0,
3
Create Table #ActionType
(
ActionTypeID tinyint,
ActionTypeName varchar(50)
)
insert into #ActionType
(
ActionTypeID,
ActionTypeName
)
select
1,
'Visit Started'
union
select
2,
'Progress to Area 2'
union
select
3,
'Complete Visit in Area 3'
union
select
4,
'Return to Area 1'
union
select
5,
'Return to Area 2'
select * from #SampleData
select * from #ActionType
drop table #SampleData
drop table #ActionType