正确 row_number 使用技巧

Tips for proper row_number use

有没有人可以帮助我创建 'SORT' 专栏。

这里有两个例子,这是如何工作的。

请注意,第二个 table 中的最后两行编号为 4 和 5,因为类型列已更改为 'k',而数字是新的且日期相同。

示例 1

       date number  type    sort
        2012-03-23  3660    d   1
        2015-06-01  1890    k   2
        2015-06-02  8370    k   3
        2015-06-11  4345    d   4
        2015-06-11  4345    d   5
        2015-06-11  4345    d   6
        2015-06-11  4345    d   7
        2015-06-11  4345    d   8
        2015-06-11  4345    d   9
        2015-06-11  3534    k   10
        2015-06-11  3534    k   11

示例 2

    date    number  type    sort
    2012-03-23  3660    d   1
    2015-06-01  1890    k   2
    2015-06-02  8370    k   3
    2015-06-11  4345    k   4
    2015-06-11  4345    k   5
    2015-06-11  4345    k   6
    2015-06-11  4345    k   7
    2015-06-11  4345    k   8
    2015-06-11  4345    k   9
    2015-06-11  3534    k   4
    2015-06-11  3534    k   5

有点奇怪的要求,但这是解决方案:

select date, number, type, dense_rank() over(order by date, type asc, rank asc) rank2 from (
select row_number() over (partition by date, number, type order by date asc,type desc) rank, * from testTable
) a order by date, number desc, rank2 asc

和 sql fiddle:

http://sqlfiddle.com/#!3/0ad7d/15