У меня есть таблица, заполненная историей возможностей вплоть до уровня продукта.Если у возможности есть 3 продукта, для этой одной возможности будет 3 строки.Ниже показано:
AccNum OppNum Product SnapshotDate NextStep
1 1 AAA 2019-04-02 Reach out and gauge interest
2 1 CCC 2019-04-02 Decision on hold due to paperwork
2 1 CCC 2019-03-31 NULL
2 1 CCC 2019-03-24 NULL
2 2 AAA 2019-04-02 Bid May. Discuss details w/ Vela
2 2 BBB 2019-04-02 Bid May. Discuss details w/ Vela
2 2 AAA-Inst. 2019-04-02 Bid May. Discuss details w/ Vela
2 2 AAA 2019-03-31 Bid May
2 2 BBB 2019-03-31 Bid May
2 2 AAA-Inst. 2019-03-31 Bid May
Цель состоит в том, чтобы извлечь предыдущую SnapshotDate и предыдущий NextStep, чтобы увидеть, изменились ли значения в NextStep между самым последним снимком и предыдущим.
Идеальная таблица была бы такой (я хочу сделать то же, что и для SnapshotDate для столбца NextStep, я не смог подогнать его на странице форума):
AccNum OppNum Product SnapshotDate SnapshotDatePrev
1 1 AAA 2019-04-02 2019-03-31
2 1 CCC 2019-04-02 2019-03-31
2 1 CCC 2019-03-31 2019-03-24
2 1 CCC 2019-03-24 2019-03-17
2 2 AAA 2019-04-02 2019-03-31
2 2 BBB 2019-04-02 2019-03-31
2 2 AAA-Inst. 2019-04-02 2019-03-31
2 2 AAA 2019-03-31 2019-03-24
2 2 BBB 2019-03-31 2019-03-24
2 2 AAA-Inst. 2019-03-31 2019-03-24
Вот что ясделали.Я не могу правильно вытянуть предыдущую SnapshotDate.Я могу вытащить строку до текущей только с помощью функции отведения.Я не смог разобраться с несколькими строками на одну запись в зависимости от количества продуктов.(См. AccNum: 2 OppNum: 2)
create table GTM.dbo.Table_History
(
AccNum int,
OppNum int,
Product nvarchar(50),
SnapshotDate date,
NextStep nvarchar(150)
)
insert into GTM.dbo.Table_History
values
(1,1,'AAA','2019-04-02','Reach out and gauge interest'),
(2,1,'CCC','2019-04-02','Decision on hold due to paperwork'),
(2,1,'CCC','2019-03-31',NULL),
(2,1,'CCC','2019-03-24',NULL),
(2,2,'AAA','2019-04-02','Bid May. Discuss details w/ Vela'),
(2,2,'BBB','2019-04-02','Bid May. Discuss details w/ Vela'),
(2,2,'AAA-Inst.','2019-04-02','Bid May. Discuss details w/ Vela'),
(2,2,'AAA','2019-03-31','Bid May'),
(2,2,'BBB','2019-03-31','Bid May'),
(2,2,'AAA-Inst.','2019-03-31','Bid May')
SELECT *
FROM(
SELECT
AccNum
,OppNum
,Product
,convert(DATE,DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1)) AS PrevSun
,SnapshotDate
,lead(SnapshotDate) OVER (PARTITION BY AccNum, OppNum ORDER BY SnapshotDate DESC) AS SnapshotDatePrev
,NextStep
,lead(NextStep) OVER (PARTITION BY AccNum, OppNum ORDER BY SnapshotDate DESC) AS NextStepprev
FROM GTM.DBO.Table_History) t1
WHERE t1.SnapshotDatePrev>=t1.PrevSun
Любое руководство будет с благодарностью.Спасибо!