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

如何在DolphinDB SQL中生成每组从1开始的分组行号

如何在DolphinDB SQL中按分组生成从1开始的行号?

处理股票tick数据时,需要为每个ticker下的交易记录独立编号——AAPL对应1、2、3,MSFT对应1、2,GOOG对应1、2、3,不同分组间编号互不干扰。

示例数据

t = table(
    `AAPL`AAPL`AAPL`MSFT`MSFT`GOOG`GOOG`GOOG as ticker,
    09:30m 09:31m 09:32m 09:30m 09:31m 09:30m 09:31m 09:32m as time,
    [150, 151, 152, 200, 201, 300, 301, 302] as price
)

预期结果

tickertimepricerow_num
AAPL09:301501
AAPL09:311512
AAPL09:321523
MSFT09:302001
MSFT09:312012
GOOG09:303001
GOOG09:313012
GOOG09:323023

尝试过的无效方法

  • 直接使用rowNo()函数:全局计数,分组间不重置编号
select ticker, time, price, rowNo(ticker) as row_num from t

结果中AAPL得到0、1、2,MSFT从3、4开始,GOOG从5、6、7开始,不符合需求。

  • 添加order by排序:仅调整了记录顺序,但编号仍未按分组重置
select ticker, time, price, rowNo(ticker) as row_num
from t
order by ticker, time

结果中MSFT的编号还是从3开始,未达到预期。

解决方案

在DolphinDB中,使用rowNo()配合context by可以实现分组内的行号重置,若需要从1开始计数,只需对rowNo()的结果加1即可:

select ticker, time, price, rowNo() + 1 as row_num 
from t 
context by ticker 
order by ticker, time

说明

  • context by ticker指定按ticker字段分组,rowNo()会在每个分组内从0开始递增计数;
  • 加1后即可得到从1开始的分组行号;
  • 最后通过order by ticker, time保证每个分组内的记录按时间顺序排列,编号逻辑符合交易时序。

内容的提问来源于stack exchange,提问作者Theobald_z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 15:03:09