Clipper On Line • Ver Tópico - Exemplo anterior,entrada,saida,saldo

Exemplo anterior,entrada,saida,saldo

Discussão sobre SQL

Moderador: Moderadores

 

Exemplo anterior,entrada,saida,saldo

Mensagempor JoséQuintas » 27 Mar 2020 19:43

Só um exemplo simples, de um principiante.
produto, saldo anterior, entradas, saídas, saldo atual

SELECT esproduto, anterior, entradas, saidas, anterior + entradas - saidas AS saldo
FROM
(
SELECT
esproduto,
SUM( if( YEAR( esdatlan ) < 2020, if( estiplan = '1',esqtde, -esqtde), 0 ) ) AS anterior,
SUM( if( YEAR( esdatlan ) = 2020 AND estiplan='1', esqtde, 0 ) ) AS entradas,
SUM( if( YEAR( esdatlan ) = 2020 AND estiplan='2', esqtde, 0 ) ) AS saidas
FROM jpestoque
GROUP BY esproduto
) AS b


mysqlsample.png


Talvez interesse isto:

tot.png


1.102 registros é o resultado. a tabela tem 243.693 registros.
1.2 segundos de tempo (0.5 foi na segunda vez, porque fica em cache fica mais rápido).

Tentem somar 243.693 registros em DBF pra ver o que dá....rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor JoséQuintas » 27 Mar 2020 19:53

Faltou a descrição do produto.
ela está no jpitem, chama-se IEDESCRI
Então, só relacionar o código do produto

SELECT esproduto, jpitem.IEDESCRI, anterior, entradas, saidas, anterior + entradas - saidas AS saldo
FROM
(
SELECT
esproduto,
SUM( if( YEAR( esdatlan ) < 2020, if( estiplan = '1',esqtde, -esqtde), 0 ) ) AS anterior,
SUM( if( YEAR( esdatlan ) = 2020 AND estiplan='1', esqtde, 0 ) ) AS entradas,
SUM( if( YEAR( esdatlan ) = 2020 AND estiplan='2', esqtde, 0 ) ) AS saidas
FROM jpestoque
GROUP BY esproduto
) AS b
LEFT JOIN jpitem ON jpitem.IDPRODUTO = b.esproduto


Não mudou muito o tempo de execução.

lubrax.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor JoséQuintas » 27 Mar 2020 19:57

E porque tá tudo negativo?

porque eu inverti entradas e saídas kkkkkkkk
errei na parte mais simples kkkkkkk
1 é saída, 2 é entrada, e fiz o contrário.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor JoséQuintas » 27 Mar 2020 20:12

Só comentário a mais:

Pra quem não conhece, esse programa é o HEIDISQL, que permite mexer com base de dados MySQL, MariaDB, e outras.
Encima é o comando que vai pro servidor, e embaixo é o que o servidor devolve, em forma de browse/grid.

No caso do aplicativo, o aplicativo envia o comando de cima, e recebe o resultado de baixo.

É um bom programa pra "brincar", testando comandos pra ver o que acontece, ou pra conferir alguma coisa.

Acho que ele dá uma boa visão do que é SQL.
Envia o comando de cima, recebe o retorno de baixo.

No caso do ADO, o retorno vém em formato ADO
No caso de SQLMIX, o retorno vém em formato DBF
No caso de hbmysql, o retorno vém em formato array

Como eu já disse, é como se fosse um "temporário", que o servidor manda pronto pra uso.
Quanto mais o servidor puder fazer, melhor.

No caso acima, eram 243.693 registros.
Como o servidor mandou pronto, vieram só 1.102 registros com os totais.

Processamento rápido, porque é local no servidor, e economizou rede e terminal, porque evitou 242.000 registros inúteis pela rede.
Por mais que um acesso DBF agilize, não tem comparação.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor asimoes » 27 Mar 2020 20:44

Quintas,

O ideal é criar Stored Procedures e retornar uma lista ( cursor ) desta consulta
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor asimoes » 27 Mar 2020 20:48

2020-03-27 20_47_17-Window.png
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor bencz » 27 Mar 2020 20:48

1.2 segundos de tempo

Ainda ta lento... a tabela tem poucos registros, não é motivo para demorar tanto
Imagem
Avatar de usuário

bencz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 517
Data de registro: 28 Abr 2012 17:36
Curtiu: 6 vezes
Mens.Curtidas: 34 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor asimoes » 27 Mar 2020 20:50

2020-03-27 20_49_29-Window.png
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor asimoes » 27 Mar 2020 20:54

Exemplo simples:
DELIMITER //

CREATE OR REPLACE PROCEDURE Busca(IN p_sCodigo VARCHAR(5), INOUT p_sErro VARCHAR(4000))
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
    SET p_sErro = '';
    SELECT * FROM CADASTROSOCIOS CAD WHERE CAD.CODIGO = p_sCodigo;
END //
DELIMITER ;
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor asimoes » 27 Mar 2020 20:57

Exemplo chamando a SP

     cPLSQL := "asaprev.Busca"
     
      aVarS  := { { "p_sCodigo", '20735',      "V", "I" }, ;
                    { "p_sErro",   Space(100),   "V", "O" } ;
                }
       
      aNmCampo := { "CODIGO", "NOME", "ENDERECO"  }
     
      aDados := {}
     
      IF oConexao:AdoPLSQL( @oRecordSet, cPLSQL, @aVarS, "P", @cErro, .T., @aDados, aNmCampo ) != 0
      ENDIF
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Exemplo anterior,entrada,saida,saldo

Mensagempor JoséQuintas » 29 Mar 2020 09:21

bencz escreveu:Ainda ta lento... a tabela tem poucos registros, não é motivo para demorar tanto


Depois vou pesquisar.

Já descobri uma coisa: porque as vezes o comando é lento ou rápido:
Num campo string usado como número... depende de existir algum valor que NÃO pode ser traduzido pra número.

É que preciso alterar com cuidado, porque checagens IF ! Empty( campo ) deixam de funcionar se o defalt passou a ser '0'.
Mas de qualquer forma, acabando com campos texto aonde pode ser fixado número.
Ao invés de converter pra ficar igual DBF, passei a converter somente na leitura/gravação do DBF, aonde ainda existe DBF.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro