正确 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:
有没有人可以帮助我创建 '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: