如何实现 oracle 的 row_number over 语句

伪代码如下:

select
日期,
代码,
row_number() over(partition by 日期 order by 涨跌幅 desc)
from 日线

请问在 DolphinDB 中如何编写 SQL 语句可以实现 Oracle 的 row_number() over(partition by 分组列 order by 排序列 desc) 语句?

另外,如何通过一个语句实现不同列的 row_number 计算呢?目前的解决方案是重复调用下述方法实现的:1. addColumn 2. select+order by 3. update rowNo  context by 分组列

请先 登录 后评论

1 个回答

veryOrdinary
a = table(2020.01.01 + 0 0 0 1 1 1 as date, 0.5 0.4 0.5 0.3 0.7 0.2 as ret)
select date, ret, rowNo(date) from a context by date csort ret desc

可以通过上述语句实现您的需求,但需要注意和 oracle 中不同,在 DolphinDB 中行号是从 0 开始而不是从 1 开始的。

关于您的第二个问题,您可以通过 contextby 函数实现:

a = table(2020.01.01 + 0 0 0 1 1 1 as date, 3.3 4.2 5.1 3.2 1.2 1.8 as val, 0.5 0.4 0.5 0.3 0.7 0.2 as ret)
select date, ret,contextby(rowNo, date, date, ret) as c1,  val, contextby(rowNo, date, date, val) as c2 from a context by date csort ret desc

但需要注意该函数只能按照顺序排序,不支持倒序排序。

请先 登录 后评论