Página 1 de 1
Ordem do cálculo
Enviado: 08 Jan 2024 13:15
por JoséQuintas
Código: Selecionar todos
:cSQL := "SELECT" + ;
" BADATBAN, BADATEMI, BARESUMO, BAHIST, " + ;
" IF( BAVALOR > 0, BAVALOR, 0 ) AS ENTRADA," + ;
" IF( BAVALOR < 0, BAVALOR, 0 ) AS SAIDA," + ;
" @SOMA := @SOMA + BAVALOR AS SALDO" + ;
" FROM" + ;
" ( SELECT BADATBAN, BADATEMI, BARESUMO, BAHIST, BAVALOR, IDBANCARIO FROM JPBANCARIO" + ;
" WHERE BAVALOR <> 0" + ;
" ORDER BY BADATBAN, BADATEMI, IDBANCARIO ) AS B" + ;
" ORDER BY BADATBAN, BADATEMI, IDBANCARIO"
O cálculo não obedece o order by
Tentei usar sub-query, mas não resolveu.
Alguma idéia?
nota:
o cálculo é cumulativo, mas segue a ordem natural da tabela, e não o order by definido
Ordem do cálculo
Enviado: 08 Jan 2024 14:43
por ivanil
Ordem de execução do motor mysql:
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY
7. LIMIT
Ordem do cálculo
Enviado: 08 Jan 2024 19:18
por JoséQuintas
Mesmo assim:
Código: Selecionar todos
" FROM" + ;
" ( SELECT BADATBAN, BADATEMI, BARESUMO, BAHIST, BAVALOR, IDBANCARIO FROM JPBANCARIO" + ;
" WHERE BAVALOR <> 0" + ;
" ORDER BY BADATBAN, BADATEMI, IDBANCARIO ) AS B" + ;
Achei que essa sub-query seria criada primeiro antes da outra.
Essa deixaria já na ordem necessária.
Ordem do cálculo
Enviado: 09 Jan 2024 08:28
por marco.prodata
Tenta com CTE
Código: Selecionar todos
WITH
cte1 AS (SELECT a, b FROM table1),
cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;
https://dev.mysql.com/doc/refman/8.0/en/with.html
Ordem do cálculo
Enviado: 22 Mar 2024 14:23
por MrBombastic1
Parece que o problema está relacionado ao cálculo cumulativo não seguindo a ordem definida no ORDER BY. Uma possível solução seria usar a função de janela SUM() em vez de uma variável de usuário (@SOMA) para calcular o saldo cumulativo. Isso deve garantir que o cálculo siga a ordem correta definida no ORDER BY. Aqui está um exemplo de como você pode ajustar seu código:
Código: Selecionar todos
SELECT
BADATBAN,
BADATEMI,
BARESUMO,
BAHIST,
IF( BAVALOR > 0, BAVALOR, 0 ) AS ENTRADA,
IF( BAVALOR < 0, BAVALOR, 0 ) AS SAIDA,
SUM(BAVALOR) OVER (ORDER BY BADATBAN, BADATEMI, IDBANCARIO) AS SALDO
FROM
JPBANCARIO
WHERE
BAVALOR <> 0
ORDER BY
BADATBAN, BADATEMI, IDBANCARIO
Espero que isso ajude a resolver seu problema!
Ordem do cálculo
Enviado: 22 Mar 2024 18:47
por JoséQuintas
Legal isso, achei até mais opções.
https://learnsql.com/blog/sum-over-partition-by/
Mas aqui caiu no problema da versão do servidor.
Num servidor com mariadb 10.x aceitou, mas em outro com mysql 5.6 não.
Só depois que atualizar todos.
Ordem do cálculo
Enviado: 24 Mar 2024 10:06
por MrBombastic1
Espero que essa sugestão ajude a resolver seu problema! Se precisar de mais alguma coisa, fique à vontade para me perguntar, estou sempre disponível no chat
jogo plinko. Desejo-lhe boa sorte e mais sucesso na programação!