Разница в продажах между датой и датой-1 на уровне продукта - PullRequest
0 голосов
/ 04 октября 2019

Я изо всех сил пытаюсь найти разницу в продажах между датой и датой-1, где у меня есть тысячи продуктов

enter image description here

O / pЯ хотел бы иметь разницу между днем ​​2 и днем ​​1, но на уровне продукта,

Заранее спасибо за помощь,

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Логика с использованием lag() выглядит следующим образом:

select t.*,
       (sales -
        (case when lag(date) over (partition by product_name order by date) = dateadd(day, -1, date)
              then lag(sales) over (partition by product_name order by date)
         end)
       ) as diff
from t;

Обратите внимание на логику для обработки пропущенных дат для продукта. Это также предполагает, что для продукта нет повторяющихся дат, что соответствует формулировке вопроса.

1 голос
/ 04 октября 2019

Как уже упоминалось в комментариях, вы можете использовать LAG, но если вы используете более раннюю версию, чем 2012, вы можете самостоятельно присоединиться к таблице, используя дату - 1 день и название продукта.

CREATE TABLE #TEMP(ProductName varchar(1), [Date] Date, Sales int)

INSERT INTO #TEMP VALUES
('a', '07/01/2019', 5), 
('a', '07/02/2019', 10),
('a', '07/03/2019', 15), 
('a', '07/04/2019', 20),
('b','07/01/2019', 5),
('b','07/02/2019', 10),
('b','07/03/2019', 15),
('b','07/04/2019', 20)

--drop table #TEMP

SELECT 
    a.ProductName, 
    a.[Date], 
    a.Sales,    
    b.[Date],
    b.Sales,
    a.Sales - b.Sales as difference
FROM #TEMP a
LEFT JOIN #TEMP b ON b.[Date] = DATEADD(day, -1, a.[Date]) 
    AND b.ProductName = a.ProductName

Выход

ProductName Date       Sales       Date       Sales       difference
----------- ---------- ----------- ---------- ----------- -----------
a           2019-07-01 5           NULL       NULL        NULL
a           2019-07-02 10          2019-07-01 5           5
a           2019-07-03 15          2019-07-02 10          5
a           2019-07-04 20          2019-07-03 15          5
b           2019-07-01 5           NULL       NULL        NULL
b           2019-07-02 10          2019-07-01 5           5
b           2019-07-03 15          2019-07-02 10          5
b           2019-07-04 20          2019-07-03 15          5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...