如何解决如何在MySQL中对已排序的数据集进行row_number
a b c D
X 201801 1 1
X 201802 0 1
X 201803 0 2
X 201804 1 1
X 201805 0 1
Y 201801 1 1
Y 201802 0 1
Y 201803 0 2
Y 201804 1 1
Y 201805 0 1
这是我的数据集(a,b,c)中的3列。如何在MySQL中添加新列D? D由c排序,如果当前c和先前的c具有相同的值,则加1,否则,从1开始。
解决方法
这是一个空白问题,您要在其中构建具有相同值的相邻记录组。
在这里,最简单的方法可能是使用行号之间的差异来定义组:
select a,b,c,row_number() over(partition by a,rn1 - rn2 order by b) d
from (
select t.*,row_number() over(partition by a order by b) rn1,c order by b) rn2
from mytable t
) t
a | b | c | d :- | -----: | :- | -: X | 201801 | 1 | 1 X | 201802 | 0 | 1 X | 201803 | 0 | 2 X | 201804 | 1 | 1 X | 201805 | 0 | 1 Y | 201801 | 1 | 1 Y | 201802 | 0 | 1 Y | 201803 | 0 | 2 Y | 201804 | 1 | 1 Y | 201805 | 0 | 1,
我将仅使用c
的累积总和然后使用row_number()
来定义组:
select t.*,row_number() over (partition by a,grp,c order by b) as d
from (select t.*,sum(c) over (partition by a order by b) as grp
from t
) t;
这似乎是最简单的解决方案。
Here是db 小提琴。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。