Запрос SELECT для пропуска строк с дубликатами, но с первым и последним вхождением в PostgreSQL - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть таблица с товарами, датами и ценами, и я пытаюсь найти способ написать запрос SELECT в PostgreSQL, который пропустит строки с дублирующимися ценами, так что только первое и последнее вхождение одной и той же цены в ряд остался бы. После изменения цены она может вернуться к предыдущему значению, и она также должна быть сохранена.

id   date        price   item
1    20.10.2018  10      a
2    21.10.2018  10      a
3    22.10.2018  10      a
4    23.10.2018  15      a
5    24.10.2018  15      a
6    25.10.2018  15      a
7    26.10.2018  10      a
8    27.10.2018  10      a
9    28.10.2018  10      a
10   29.10.2018  10      a
11   26.10.2018  3       b
12   27.10.2018  3       b
13   28.10.2018  3       b
14   29.10.2018  3       c

Результат:

id   date        price   item
1    20.10.2018  10      a
3    22.10.2018  10      a
4    23.10.2018  15      a
6    25.10.2018  15      a
7    26.10.2018  10      a
10   29.10.2018  10      a
11   26.10.2018  3       b
13   28.10.2018  3       b
14   29.10.2018  3       c

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете использовать lag() и lead():

select id, date, price, item
from (select t.*,
             lag(price) over (partition by item order by date) as prev_price,
             lead(price) over (partition by item order by date) as next_price
      from t
     ) t
where prev_price is null or prev_price <> price or
      next_price is null or next_price <> price
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...