ROW_NUMBER() OVER() 在一个奇怪的地方分区
Posted
技术标签:
【中文标题】ROW_NUMBER() OVER() 在一个奇怪的地方分区【英文标题】:ROW_NUMBER() OVER() partitioning at an odd place 【发布时间】:2020-08-03 15:09:00 【问题描述】:我有一张包含以下信息的表格:
Header 1 | Header 2 | Desired Column
1 | 1 | 2
2 | 1 | 3
3 | 1 | / 1
1 | 2 | 2
2 | 2 | 3
3 | 2 | / 1
1 | 3 | 2
2 | 3 | 3
3 | 3 | / 1
我正在尝试使用Row_Number() Over(Partition by)
来获取您可以看到的所需列。我需要 Row_number 由 Header 2 分区,但由奇数个 header 1 分区。如果这有意义吗?反斜杠表示我想要分区的位置,并且我希望能够选择标题 1 中我想要分区的数字。
我尝试使用 Lag,但无法使用。
我也试过这个:
ROW_NUMBER() OVER (PARTITION BY Header1 = 3, Header2) OVER (ORDER BY Header2, Header1)
希望您能理解,并希望有人能找到解决方案。
【问题讨论】:
【参考方案1】:我想你想要:
row_number() over(partition by header2 order by header1 % 2 desc, header1 desc)
这会将不均匀的header1
s 放在首位,然后按降序排列header1
。
Demo on DB Fiddle:
页眉1 |页眉2 | rn ------: | ------: | -: 1 | 1 | 2 2 | 1 | 3 3 | 1 | 1 1 | 2 | 2 2 | 2 | 3 3 | 2 | 1 1 | 3 | 2 2 | 3 | 3 3 | 3 | 1【讨论】:
以上是关于ROW_NUMBER() OVER() 在一个奇怪的地方分区的主要内容,如果未能解决你的问题,请参考以下文章
ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
关于Oracle row_number() over()的简单使用