如何根据不同的Tag,使用不同的聚合函数计算Value?

请问DolphinDB有没有办法查询的时候,按照tag不同采取不同聚合方式生成指标。例如,这个是分布式表结构,按照tag的值不一样对value进行不同方式聚合,code1:每20分钟取max,code2:每20分钟取min,code3:每20分钟取avg,最后获得一个行转列平表。

聚合计算后的结果:

attachments-2021-07-pmQeRCe960e6d8c009f13.png
行转列后的结果:

attachments-2021-07-Q3Nmt6wt60e6d8d3348b0.png


请先 登录 后评论

2 个回答

Juntao Wang

构建一个字典,根据不同的Tag选择不同聚合函数,结合自定义聚合函数,可以实现。脚本入下:

N = 9
t = table("code" + string(take(1..3, N)) as tag, sort(take([2021.06.28T00:00:00, 2021.06.28T00:10:00, 2021.06.28T00:20:00], N)) as time, take([1.0, 2.0, 9.1, 2.0, 3.0, 9.1, 9.1, 2.0, 3.0], N) as value)

codes = dict(`code1`code2`code3, [max, min, avg])

defg func(tag, value, codes) {
	fd = codes[tag.first()]
	return call(fd, value)
}
 
t_tmp = select func(tag, value, codes) as value from t group by tag, interval(time, 10m, "null") as time
select value from t_tmp pivot by time, tag
请先 登录 后评论
Peter

根据不同的tag选择不同的自定义聚合函数,可以实现,脚本如下:

defg func1(tag, value): call(dict(`code1`code2`code3, [max, min, avg])[tag.first()], value)
SELECT func1(tag, value) AS value FROM t PIVOT BY bar(time, 10m) AS time, tag
请先 登录 后评论