首页 > 解决方案 > 查找连续行的最小值/最大值

问题描述

我有一张这样的桌子:

    name  | value
------------------
   alpha  |    90
    beta  |   105
    beta  |    44
    beta  |    56
   gamma  |    22
    beta  |   111
    beta  |    99

我想在连续的行中找到最小值和最大值,输出应该是这样的:

    name  |  min |  max
------------------------
   alpha  |   90 |   90
    beta  |   44 |  105
   gamma  |   22 |   22
    beta  |   99 |  111

有人可以帮我解决这个问题吗?

标签: postgresql

解决方案


假设您有id定义 的列consecutive rows,那么您可以

 with t  (id,  name  , value ) as (
 values
    (1, 'alpha',90), 
    (2, 'beta',105), 
    (3,'beta',44), 
    (4,'beta',56), 
    (5,'gamma',22), 
    (6,'beta',111), 
    (7,'beta',99)
  )

  select name,   min(value), max(value) from (
    select  id,  name, value, 
    row_number() over(order  by id)   -
    row_number() over(partition by name   order  by id) as grp
    from t
  ) tt
  group by name, grp
  order by min(id)

演示:https ://rextester.com/JUDP87693


推荐阅读