如何对窗口中的某个字段进行排序以获得前 N 个值,并对 DolphinDB 中的相应字段进行聚合计算?

Posted

技术标签:

【中文标题】如何对窗口中的某个字段进行排序以获得前 N 个值,并对 DolphinDB 中的相应字段进行聚合计算?【英文标题】:How to sort a field in the window for the top N values and perform aggregate calculations for the corresponding field in DolphinDB? 【发布时间】:2022-01-09 17:10:39 【问题描述】:

我的问题是关于在 DolphinDB 中计算报价数据。该表包含四列(股票代码、日期、收盘价和交易量),并按股票代码分组并按日期排序。我想做一个窗口计算,假设窗口大小为20。我的目的是对窗口中volume列中的数据进行排序,并取前5个volume记录来计算close对应值的平均值。在 DolphinDB 中计算它的最有效方法是什么?

【问题讨论】:

【参考方案1】:

目前还没有针对这种情况的有效算法,但是您可以将函数moving与用户定义的函数一起使用以获得所需的结果。未来,DolphinDB会根据场景开发功能。

使用1.30.15及以上版本的单行代码进行计算:

//suppose t is a four-column table
t = table(take(`IBM, 100) as code, 2020.01.01 + 1..100 as date, rand(100,100) + 20 as volume, rand(10,100) + 100.0 as close)

函数moving支持用户自定义anonymous aggregate function

select code, date, moving(defg(vol, close)return close[isort(vol, false).subarray(0:min(5,close.size()))].avg(), (volume, close), 20) from t context by code

【讨论】:

以上是关于如何对窗口中的某个字段进行排序以获得前 N 个值,并对 DolphinDB 中的相应字段进行聚合计算?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PostgreSQL 更新前 N 个值

MongoDB:如何对 MySQL 字段关键字等结果中的记录进行排序 [重复]

MongoDB:如何对 MySQL 字段关键字等结果中的记录进行排序 [重复]

从哪里开始使用伪冒泡排序或平均前 4 个值

Mysql:按子查询中的最大 N 个值排序

排序前解析字段函数