Расчет разницы в цене между двумя днями - PullRequest
0 голосов
/ 02 мая 2019

У меня есть следующая таблица под названием Магазины:

Date        |  Store  |  Price
2018-05-02  |  ABC    |  0.91
2018-05-02  |  DEF    |  0.81
2018-05-03  |  ABC    |  0.92
2018-05-03  |  DEF    |  0.83
2018-05-05  |  ABC    |  0.91
2018-05-05  |  DEF    |  0.85

Я пытаюсь написать запрос для данного магазина, который выведет цену, цену предыдущего дня, а также разницув цене между двумя днями и ценой (в процентах).Вывод должен выглядеть следующим образом:

 Date        |  Store  |  Price  |  PrevPrice  |  Change  |  Gain
 2018-05-03  |  ABC    |  0.92   |  0.91       |  0.01    |  1.086956522
 2018-05-05  |  ABC    |  0.91   |  0.92       |  -0.01   |  -1.098901099
 2018-05-03  |  DEF    |  0.83   |  0.81       |  0.02    |  2.409638554
 2018-05-05  |  DEF    |  0.85   |  0.83       |  0.02    |  2.352941176

Первая дата не должна быть в выводе, поскольку она не имеет предшествующей даты.У меня есть следующий запрос, который получает PrevPrice с использованием lag ():

select * 
from (
    select "Date", store, price, lag(price) over (partition by code order by "Date") as PrevPrice from Stores
) s where PrevPrice is not null;

Я не уверен, как я могу рассчитать разницу в цене между двумя днями или прирост цены.В частности, я не знаю, какие методы я могу использовать для расчета разницы в цене.Любые идеи приветствуются.

1 Ответ

3 голосов
/ 02 мая 2019

Почти нет. Просто вычтите лаг (цена) из цены:

SELECT Date, Store, Price, PrevPrice, Price - PrevPrice AS Change, (Price - PrevPrice) / PrevPrice * 100 AS Gain
FROM (
    SELECT Date, Store, Price, LAG(Price) OVER (PARTITION BY Store ORDER BY Date) AS PrevPrice
    FROM t
) AS x
WHERE PrevPrice IS NOT NULL
...