SQL - извлечение записей за предыдущую дату, когда записи строк являются динамическими - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть таблица, заполненная историей возможностей вплоть до уровня продукта.Если у возможности есть 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

Любое руководство будет с благодарностью.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...