首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在已经知道其他列的情况下,用PostgreSQL编写递归函数有什么不同的方法吗?

在已经知道其他列的情况下,用PostgreSQL编写递归函数有什么不同的方法吗?
EN

Stack Overflow用户
提问于 2021-09-04 15:34:50
回答 1查看 117关注 0票数 0

我基本上有几百行的列A和B。列C意味着等于lag(C)*A+B。

但是由于递归CTE要求您在以下形式中进行操作:

代码语言:javascript
运行
复制
Select
Union
Select

我通过逐行编号/键控/索引列A和B来解决这个问题,然后让递归CTE在它们的键与数据的键相等时通过连接来保持跟踪。但我意识到,如果它检查密钥是否相等,这是非常低效的,因为每次只有一个匹配。但是,即使向子查询添加限制1也是低效的;为什么它必须连接呢?它总是数据中的下一行。任何提示或见解都会有所帮助。

同样,我拥有的是A列、B列、行列,C是(之前的C)*A+B

我目前的解决方案是这样的:

代码语言:javascript
运行
复制
with recursive CTE (row, C) as (
   select 0,0
   union all
   select row+1,C*data.A+data.B
   from CTE
   join data on data.row = CTE.row
   where CTE.row <= # of data.rows
)

编辑:对于其他上下文,这是用于区块链分析的,任务是查找应计利息和零星转账/转出的帐户的最终余额。"A“是利率乘数,比如1.005,"B”是转进/转出,正,负,通常是0。余额是我要查找的"C“列,也是最后一个值。无法从我的数据源获得最终余额的原因是,在区块链上,数据仅记录在传输上。利率的更新是分开的。我必须将来自A和B的数据完全连接到一个账本中,这个账本上有每个利率的支付和转移的时间顺序。现在,我正在尝试以一种更有效的方式从这些数据中计算余额。

该站点只允许postgresql,但在这里,有问题的CTE是sOHMbalances:https://dune.xyz/queries/129943

EN

回答 1

Stack Overflow用户

发布于 2021-09-04 18:11:03

从您对问题的描述来看,我希望CTE看起来像这样:

代码语言:javascript
运行
复制
with recursive cte as (
      select a, b, a + b as c
      from data
      where row = 1
      union all
      select d.a, d.b, cte.c * d.a + d.b
      from data d join
           cte
           on d.row = cte.row + 1
    )
select *
from cte;

如果未定义row,则需要使用row_number()定义其他逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69056709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档