You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于列值变化分组计算DolphinDB中分组内累积最小值?

问题描述

我们有如下模拟数据表:

time = [09:00:00, 09:00:01, 09:00:02, 09:00:03, 09:00:04, 09:00:05, 09:00:06, 09:00:07, 09:00:08]
b = [101, 103, 105, 110, 129, 134, 123, 111, 120]
a = [100, 100, 100, 200, 200, 300, 200, 200, 100]
t = table(time, b, a)

// t:
time     b   a 
-------- --- ---
09:00:00 101 100
09:00:01 103 100
09:00:02 105 100
09:00:03 110 200
09:00:04 129 200
09:00:05 134 300
09:00:06 123 200
09:00:07 111 200
09:00:08 120 100

需要以a列的连续相同值作为分组(比如连续3个100为一组,连续2个200为另一组,以此类推),在每个分组内计算b列的累积最小值,预期结果如下:

time     b   a   cummin_b
-------- --- --- ---------
09:00:00 101 100 101      
09:00:01 103 100 101      
09:00:02 105 100 101      
09:00:03 110 200 110      
09:00:04 129 200 110      
09:00:05 134 300 134      
09:00:06 123 200 123      
09:00:07 111 200 111      
09:00:08 120 100 120

请问如何编写DolphinDB SQL脚本实现该功能?

解决方案

可以利用DolphinDB的rleid函数生成连续相同值的分组ID,再结合cummin函数按分组计算累积最小值,脚本如下:

// 生成连续值分组ID
t = update t, groupId = rleid(a)

// 按分组计算b列的累积最小值
result = select time, b, a, cummin(b) as cummin_b from t context by groupId

// 查看最终结果
select * from result

关键函数说明

  • rleid(a):对a列中连续的相同值生成唯一分组ID,当a的值发生变化时ID自动递增,恰好满足连续值分组的需求。
  • cummin(b) context by groupId:在每个groupId对应的分组内,计算b列从当前分组首行到当前行的累积最小值。

执行上述脚本后,即可得到预期的结果。

内容的提问来源于stack exchange,提问作者Stella.W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:33:29