sql—mysql列中的组序列值

2nbm6dog  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(325)

表mytbl有两列:第1列和第2列。我想将列1中的值范围分组为单个列2值。
例子:
第1列第21334352738393101列
我想过滤掉列2=3的a范围。
当没有范围时,它显示结束值的hiphen(-)。
结果:
斯塔登科卢21-3343793

zwghvu4y

zwghvu4y1#

这是一个缺口和孤岛问题。下面是一种使用行号之间的差异来标识组的方法:

select 
    min(col_1) as start_col_1, 
    case when max(col_1) <> min(col_1) then max(col_1) end as end_col_1, 
    col2
from (
    select t.*,
        row_number() over(partition by col2 order by col_1) as rn
    from mytable t
) t
where col_2 = 3
group by col2, col_1 - rn
order by start_col1

这是回报 null 而不是 '-' 当孤岛只由一个记录组成时(这是因为后者不是有效的数字)。
只要 col_1 无间隙增量。否则,我们可以用另一个生成自己的序列 row_number() :

select 
    min(col_1) as start_col_1, 
    case when max(col_1) <> min(col_1) then max(col_1) end as end_col_1, 
    col2
from (
    select t.*,
        row_number() over(order by col_1) as rn1,
        row_number() over(partition by col2 order by col_1) as rn2
    from mytable t
) t
where col_2 = 3
group by col2, rn1 - rn2
order by start_col1

相关问题