问题描述:我试图定义一个pl/python聚合器,它接收一组行并返回一组行,用于从查询生成的每一组行。行的输入集应该是使用查询中的GROUPBY语句生成的组。我试图通过语法找到方法,但是我很难做到。pl/pgsql函数是受欢迎的,但恐怕它们缺乏这样做的表达能力。
上下文描述:我有一个包含三列的表:ticker symbol、date和value。我正试图根据我拥有的值计算每个ticker符号和日期的macd。我可以按日期对表进行分组和排序,然后我只需要为每个组根据每个ticker的当前值和聚合器的前一个值计算该日期的聚合器的值,我想我会将其存储在SD中,然后我只需要返回一组具有该值的行,可能还有ticker to加入,但我认为应该可以保持加入的顺序并节省加入的时间。
以下是创建表的方式:

create table candles(ticker text, day date, value real,
  primary key (ticker, day));

Here you can find an example in Java(伪代码ish),显示按ticker排序后应如何处理组(按天分组)。在Java中,这些组被表示为一个ArrayList,因为它们是按ticker排序的,相同的位置对应于相同的ticker(在生成时检查数据库,因此不丢失任何记录),并且因为它们是按天分组的,所以每个组都具有与上一个调用相同的日期和下一天的值。
PD:我也添加了code to calculate MACD in pl/pgsql但是对于这个我是逐日点菜的,我想逐日点菜,并对所有的点菜进行循环计算,因为这应该更有效,特别是考虑到最终的产出必须逐日点菜才能这样消耗。
如果有什么不完全清楚的,请问我,我正在努力做到清楚和简洁。
非常感谢你。

最佳答案

抱歉,如果描述有误。我解决了我面临的问题:
使用子查询从要分组的值创建数组。select array_agg(x) from y group by z order by v;
创建一个接受数组的函数,只需在参数描述中添加[]。以及该函数的聚合器。
在最终查询中使用聚合器和子查询。
这相当简单,但我不知道数组类型及其所有可能性。对不起,谢谢你。

关于sql - pl/python接收和输出一组行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9068138/

10-11 22:08