Depending on on how all your data looks like maybe this could be a solution?
with data([DWKey],[OriginalSalesLeadId],[OpportunityStage],[LeadStage],[PreviousStages]) as(
select 107309,20240220,NULL,'SAL',NULL
union all
select 109442,20240220,'Lost',NULL,NULL
union all
select 111224,20240220,'Lost',NULL,NULL
union all
select 111458,20240220,'Lost',NULL,NULL
union all
select 111730,20240220,'Lost',NULL,NULL
union all
select 111983,20240220,'Lost',NULL,NULL
union all
select 113011,20240220,'Lost',NULL,NULL
)
SELECT [DWKey]
, [OriginalSalesLeadId]
, [OriginalSalesLeadId]
, [LeadStage]
, [OpportunityStage]
, CASE WHEN [OpportunityStage] IS NOT NULL
THEN LAG(COALESCE(OpportunityStage, LeadStage), 1, COALESCE(OpportunityStage, LeadStage))
OVER (PARTITION BY originalSalesLeadId ORDER BY DWkey)
ELSE NULL END AS PreviousStage
,FIRST_VALUE(COALESCE(LeadStage, OpportunityStage))
OVER (PARTITION BY OriginalSalesLeadId ORDER BY DWKey) AS PreviousStage2
FROM data
WHERE OriginalSalesLeadId = 20240220
Gives the output
DWKey OriginalSalesLeadId OriginalSalesLeadId LeadStage OpportunityStage PreviousStage PreviousStage2
107309 20240220 20240220 SAL NULL NULL SAL
109442 20240220 20240220 NULL Lost SAL SAL
111224 20240220 20240220 NULL Lost Lost SAL
111458 20240220 20240220 NULL Lost Lost SAL
111730 20240220 20240220 NULL Lost Lost SAL
111983 20240220 20240220 NULL Lost Lost SAL
113011 20240220 20240220 NULL Lost Lost SAL