mysql - 如何row_number()mysql中的排名数据集
问题描述
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
这是我的数据集中的 3 列(a、b、c)。如何在 MySQL 中添加新的 D 列?D按c排序,如果当前c和前一个c具有相同的值,则加1,否则从1开始。
解决方案
这是一个间隙和孤岛问题,您希望在其中构建具有相同值的相邻记录组。
在这里,最简单的方法可能是使用行号之间的差异来定义组:
select a, b, c,
row_number() over(partition by a, c, rn1 - rn2 order by b) d
from (
select t.*,
row_number() over(partition by a order by b) rn1,
row_number() over(partition by a, c order by b) rn2
from mytable t
) t
一个 | 乙 | c | d :- | -----: | :- | -: X | 201801 | 1 | 1 X | 201802 | 0 | 1 X | 201803 | 0 | 2 X | 201804 | 1 | 1 X | 201805 | 0 | 1 是 | 201801 | 1 | 1 是 | 201802 | 0 | 1 是 | 201803 | 0 | 2 是 | 201804 | 1 | 1 是 | 201805 | 0 | 1
推荐阅读
- regex - Golang正则表达式提取括号内的值并忽略任何内部括号
- ruby-on-rails - 在 Ruby on Rails 中使用 Ransack 的 sort_link 格式 mm-yyyy
- angular - 在 Angular 中获取 HTTPClient 的值
- xml - ebay api FiexedPriceTransaction 通知并获取更新的商品数量
- bash - Bash,评估文本值并在一行中删除它的第一部分
- elasticsearch - 如何在 Elasticsearch apm 中搜索自定义标头?
- javascript - p5.js createSlider() 返回 ReferenceError: createSlider 未定义
- javascript - axios - 从响应对象中获取请求 URI 数据
- laravel - 不能将 Illuminate\Http\Response 类型的对象用作数组(Larravel/October CMS)
- r - 如何使用字符变量来引用 R 中的 data.frame?