postgresql分组依据直到下一行不同

r7s23pms  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(461)

我在postgres中有以下数据:

  1. index | item |
  2. ------+--------
  3. 10 | aaa |
  4. 20 | aaa |
  5. 30 | bbb |
  6. 40 | aaa |
  7. 50 | aaa |

我想把它分组,得到最小值和最大值。但是,它只能分组,直到下一行是不同的项。
期望值:

  1. indexMin | indexMax | item |
  2. ---------+----------+----------
  3. 10 | 20 | aaa |
  4. 30 | 30 | bbb |
  5. 40 | 50 | aaa |

你能给我指点迷津吗?

gopyfrb3

gopyfrb31#

这是一个间隙和孤岛问题,您需要将“相邻”行分组在一起。在这里,最简单的方法是使用行号之间的差异来标识组:

  1. select min(idx) min_idx, max(idx) max_idx, item
  2. from (
  3. select
  4. t.*,
  5. row_number() over(order by idx) rn1,
  6. row_number() over(partition by item order by idx) rn2
  7. from mytable t
  8. ) t
  9. group by item, rn1 - rn2
  10. order by min(idx)

相关问题