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)

这会将不均匀的header1s 放在首位,然后按降序排列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

ROW_NUMBER() OVER函数的基本用法

关于Oracle row_number() over()的简单使用

ROW_NUMBER() OVER() 函数用法详解 (分组排序,多例子)

ROW_NUMBER() OVER()函数用法详解