это можно сделать намного проще, используя аналитические функции, которые легче читать и в большинстве случаев даже быстрее.Я привожу пример использования t-sql, так как вы ссылаетесь на ssms:
create table dbo.Table_History
(
Acc_Num int,
Opp_Num int,
Stage nvarchar(50),
WeekNumber int
)
insert into dbo.Table_History
values
(1,1,'won',0),
(1,1,'Negotiation',1),
(1,1,'Prospecting',2),
(1,2,'Prospecting',0),
(1,2,'Prospecting',1),
(2,1,'Negotiation',0),
(2,1,'Prospecting',1)
WITH CompareWeeks AS
(
SELECT
Acc_Num AS Acc_Num,
Opp_Num AS Opp_Num,
Stage AS Stage_Cur,
WeekNumber as WeekNumber_cur,
lag(Stage) over (partition by Acc_Num, Opp_Num order by WeekNumber desc) AS Stage_prev,
lag(WeekNumber) over (partition by Acc_Num, Opp_Num order by WeekNumber desc) as WeekNumber_prev
FROM dbo.Table_History
)
SELECT
Acc_Num,
Opp_Num,
Stage_Cur,
WeekNumber_cur
--INTO dbo.GoalTable
FROM CompareWeeks
WHERE Stage_Cur <> Stage_prev and Stage_prev is not null
. Пожалуйста, имейте в виду, что приведенный выше пример выглядит непоследовательным.Вы не учитываете первую строку для (1,1), но вы учитываете для (2,1), хотя для сравнения с ней нет недели.