Dolphindb context by和order by踩坑

73 阅读1分钟

context_by是dolphindb特有的函数,作用和group by类似,按照指定序列进行分组,但是也有一些不同,group by返回的是一条数据,而context by会返回分组后组内所有数据。 单独使用context by没有任何问题,但是我搭配order by时,问题出现了。 前情提要,我有一张股票数据表,分别有date和stock_code列,我现在要找到每个stock_code日期最大值,如果查询正确,日期最大值都是2025.07.31。 我最开始的sql如下,先用context by 对stock_code进行分组,然后用order by进行排序:

select date, stock_code  
from loadTable("dfs://stock_db", "stock_daily_info") 
where stock_code="833454" 
context by stock_code 
order by date desc 
limit 1

但是查询结果如下图所示,获得的日期不是最大值2025.07.31,实际是2025.07.29,说明context by之后order by就失效了:

image.png

那么先用order by进行排序,再用context by进行分组,最后通过limit拿一条数据呢? 答案是可行,下面是对应代码:

select date, stock_code  
from loadTable("dfs://stock_db", "stock_daily_info") 
where stock_code="833454" 
order by date desc 
context by stock_code 
limit 1

下图是查询结果,拿到了2025.07.31的数据 image.png 那么如果一定要先用context by呢?答案是也可以,搭配csort

select date, stock_code  
from loadTable("dfs://stock_db", "stock_daily_info") 
where stock_code="833454" 
context by stock_code 
csort date desc 
limit 1

下图是查询结果,拿到了2025.07.31的数据 image.png

总结

  1. context by可以对数据进行分组,返回所有内容。
  2. context by之后用order by不起作用。
  3. context by处理后要排序,要用csort。