假设我有一张带有时间戳 ( ts
) 和值 ( a
) 的表。
使用一些示例数据:
ts, a
1, 10
2, 30
3, 10
4, 20
5, 40
6, 10
7, 20
8, 30
etc
我想按 ts 顺序对行进行分组,通过求和a
并输出总和a
> 50 的行。
在这种情况下,输出应该是两个时间戳(第一行和最后一行):
1, 3 -- 10 + 30 + 10
4, 5 -- 20 + 40
6, 8 -- 10 + 20 + 30
但我不知道该怎么做。我对 Copilot 所做的所有尝试都产生了永远无法完成的复杂代码。
每个下一行都依赖于所有先前的行。这有利于程序解决方案。
创建此 PL/pgSQL 函数一次:
称呼:
小提琴
我添加了每个组的总数,这很容易抑制。
或者,如果您不想(或不能)保留一个临时函数,则可以使用临时函数。请参阅:
您可以使用递归 CTE 来改变 SQL 基于集合的性质。但相比之下,这很笨重且速度很慢。请参阅: