SELECT查询,以跳过具有重复项的行,但保留PostgreSQL中的第一个和最后一个匹配项

时间:2018-11-08 21:53:05

标签: sql postgresql

我有一个表,其中包含项目,日期和价格,我试图找到一种在PostgreSQL中编写SELECT查询的方法,该查询将跳过重复价格的行,以便仅出现相同价格的第一个和最后一个出现会留下来。价格更改后,它可以返回到先前的值,并且也应保留。

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 :(得分:1)

您可以使用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