SQL - Фильтр данных показывает только историю изменений - PullRequest
0 голосов
/ 09 июля 2020

У меня таблица выглядит так:

    
 | ID_Product | Product | Price |           Date            | 
------------------------------------------------------
 |     01     |  Socks  |  $20  |  2020-06-02 18:27:49.000  | 
 |     03     |  Belt   |  $30  |  2020-06-03 13:27:08.000  | 
 |     01     |  Socks  |  $20  |  2020-06-11 17:00:04.000  | 
 |     02     |  Boots  |  $40  |  2020-06-12 09:27:19.000  | 
 |     02     |  Boots  |  $40  |  2020-06-17 11:27:10.000  | 
 |     01     |  Socks  |  $25  |  2020-06-25 15:29:45.000  | 
 |     01     |  Socks  |  $28  |  2020-07-08 16:27:30.000  | 


Мне нужен запрос, чтобы получить отдельные строки по цене и дате, чтобы получить некоторую «историю» изменений цен, как это

    
 | ID_Product | Product | Price |           Date            | 
------------------------------------------------------
 |     03     |  Belt   |  $30  |  2020-06-03 13:27:08.000  | 
 |     01     |  Socks  |  $20  |  2020-06-11 17:00:04.000  | 
 |     02     |  Boots  |  $40  |  2020-06-17 11:27:10.000  | 
 |     01     |  Socks  |  $25  |  2020-06-25 15:29:45.000  | 
 |     01     |  Socks  |  $28  |  2020-07-08 16:27:30.000  | 


Спасибо!

1 Ответ

1 голос
/ 09 июля 2020

Кажется, вам просто нужна самая последняя дата для каждой цены продукта:

select product_id, price, max(date)
from t
group by product_id, price;

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

select t.*
from (select t.*,
             lag(price) over (partition by product_id order by date) as prev_price
      from t
     ) t
where prev_price is null or prev_price <> price;
...