通过 In mysql 使用分区获取增量数

Posted

技术标签:

【中文标题】通过 In mysql 使用分区获取增量数【英文标题】:Get Incremental number using partition by In mysql 【发布时间】:2020-02-26 09:39:13 【问题描述】:

我有一些独特的场景

输入:

   VAR
1   A
2   A
3   A
4   NULL
5   NULL
6   A
7   A
8   A
9   B
10  B
11  B
12  NULL
13  B
14  B
15  B
16  C
17  C
18  C
19  C

我按上述顺序输入数据。我需要使用分区列 VAR 创建输出列作为排名。但是,如果它之间有空值,则 Rank 应该重置它的计数器。

预期输出:

   VAR  output
1   A   1
2   A   2
3   A   3
4   NULL    
5   NULL    
6   A   1
7   A   2
8   A   3
9   B   1
10  B   2
11  B   3
12  NULL    
13  B   1
14  B   2
15  B   3
16  C   1
17  C   2
18  C   3
19  C   4

【问题讨论】:

我按上述顺序输入数据:不是真的,除非你有另一列定义记录的顺序。 @GMB 我有订购索引列,现在检查更新问题 【参考方案1】:

这看起来像是一个间隙和孤岛问题。假设您有另一列定义记录的顺序(例如,id),这是一种使用行号之间的差异来定义相邻记录组的方法:

select 
    var,
    case when var is not null
        then row_number() over(partition by var, rn1 - rn2 order by id) 
    end rnk 
from (
    select 
        t.*,
        row_number() over(order by id) rn1,
        row_number() over(partition by var order by id) rn2
    from mytable t
) t
order by id 

请注意,窗口函数仅在最新的 mysql 版本(即 8.0 版)中可用。

【讨论】:

以上是关于通过 In mysql 使用分区获取增量数的主要内容,如果未能解决你的问题,请参考以下文章

mysql 分区PARTITIONS之基本使用

获取 Hive 分区之间的增量更改

mysql表分区使用及详细介绍

mysql 分区的字段 与 where 的条件有啥样的关系啊

Mysql PARTITION BY分区记录

数据的全量与增量