请问contxt by+last是不是取每个分组后的最后一条记录

在DolphinDB database中用context by分组,就会有多条记录,我想在每个分组里取最后一条。代码如下:

select last(ShortTermLoan),InfoPublDate,CompanyCode,EndDate,IfAdjusted,IfMerged 
from tbFactor
where EndDate = 2015.06.30,IfAdjusted == 2 and IfMerged == 1 and CompanyCode == 1518 
context by InfoPublDate,CompanyCode,EndDate,IfAdjusted,IfMerged 

可是返回了多条记录,如下图所示,
contextbylast_20200613093622.png
我的问题是context by分组后,每个分组应该有多条记录,然后我取last,这样不是返回每个分组里的最后一条记录吗?

阅读 1.9k
2 个回答

last是聚合函数,context by返回的记录数跟组的长度一样,所以会重复产生多条记录。
context by可以用top 1来取最后一条记录,代码如下:

select top 1 last(date(EndDate)) as date,last(ShortTermLoan) as v from tbFactor
where EndDate >= 2015.06.30,EndDate <= 2020.03.31,IfAdjusted == 2 and IfMerged == 1 and CompanyCode == 1518 
context by InfoPublDate,CompanyCode,EndDate,IfAdjusted,IfMerged csort JSID asc

如果只是取最后一条记录,没有必要使用聚合函数last,直接使用limit子句。如果limit后面的值是负数,表示最后几条记录,正数是前面几条记录。limit和context by一起使用时,限制的是每个group的输出,而不是整体结果。

select date(EndDate) as date,ShortTermLoan as v from tbFactor
where EndDate >= 2015.06.30,EndDate <= 2020.03.31,IfAdjusted == 2 and IfMerged == 1 and CompanyCode == 1518 
context by InfoPublDate,CompanyCode,EndDate,IfAdjusted,IfMerged csort JSID asc, limit -1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏