通过 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 使用分区获取增量数的主要内容,如果未能解决你的问题,请参考以下文章