Digamos que eu tenha uma tabela com um registro de data e hora ( ts
) e um valor ( a
).
Com alguns dados de amostra:
ts, a
1, 10
2, 30
3, 10
4, 20
5, 40
6, 10
7, 20
8, 30
etc
Gostaria de agrupar linhas, na ordem ts, somando a
e gerando uma linha onde a soma de a
seja > 50.
Neste caso, a saída deve ser dois registros de data e hora (primeira e última linha):
1, 3 -- 10 + 30 + 10
4, 5 -- 20 + 40
6, 8 -- 10 + 20 + 30
Mas não tenho a mínima ideia de como proceder. Todas as tentativas que fiz com o Copilot produziram código complexo que nunca termina.
Cada próxima linha depende de todas as linhas anteriores. Isso se presta a uma solução procedural .
Crie esta função PL/pgSQL uma vez:
Chamar:
violino
Adicionei o total por grupo, o que é fácil de suprimir.
Ou use uma função temporária se você não quiser (ou não puder) persistir uma. Veja:
Você pode dobrar a natureza baseada em conjunto do SQL com um CTE recursivo. Mas isso é difícil de manejar e lento em comparação. Veja: