【问题标题】:Using ROW_NUMBER() to Partition DataSets使用 ROW_NUMBER() 对数据集进行分区
【发布时间】:2019-07-08 07:59:19
【问题描述】:

我对在 SQL 中使用 ROW_NUMBER() 有点困惑。

有一个当前如下所示的数据集:

 Number ID
    1   1
    2   6
    3   11

我在下面写了一个查询:

SELECT rownum = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Number), Number
FROM #SEQNUMBERSTEMP

输出是什么:

rownum  Number
1       1
1       2
1       3
1       4
1       5
1       6
1       1
1       2
1       3
1       4
1       1

但我想实现以下目标:

rownum  Number
1       1
1       2
1       3
1       4
1       5
2       1    # Note 2 should start at position 6
2       2
2       3
2       4
2       5
3       1    # Note 3 should start at position 11
3       2
3       3

【问题讨论】:

    标签: sql sql-server database tsql window-functions


    【解决方案1】:

    使用排名()

    SELECT
                rownum = rank() OVER (ORDER BY Number),
                Number
            FROM #SEQNUMBERSTEMP
    

    【讨论】:

    • rank() 给了我相同的结果集
    【解决方案2】:

    您可能希望使用不带PARTITION BY 子句的DENSE_RANK(),例如:

    SELECT rownum = DENSE_RANK() OVER (ORDER BY Number), Number
    FROM #SEQNUMBERSTEMP
    

    【讨论】:

    • 我迟到了 13 秒 :)
    猜你喜欢
    • 2022-07-29
    • 2017-07-31
    • 1970-01-01
    • 2016-01-27
    • 2018-05-14
    • 2015-03-09
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多