Jump to content
Marcelo_Pacifico

Primeiro e último registro

Recommended Posts

Bom Dia.

 Sou novo aqui no fórum e, gostaria da ajuda dos colegas para resolver uma questão que estou penando há dias.

 

Necessito retornar o primeiro e o último registro de uma consulta com vários valores agrupados.

A primeira parte da query  (sem o MAX), trás os resultados corretamente a segunda, apenas a data final esta correta. Já os demais resultados podem coincidir de serem os corretos, exceto a quantidade.

já tentei usar uma "Union ",  mas, não trouxe os resultados esperados.

A Imagem em anexo, deve deixar as coisas mais claras para os colegas possam entender o que estou querendo.

 

Só para complementar e esclarecer prováveis dúvidas.

Os valores iniciais (campos com "Ini") estão corretos, o que esta errado são os valores finais ("Fin") referente ao Termo, Livro e folha ou seja, para o número do documento final, deveria me retornar os valores mencionados como "esperado" na imagem.

 

SELECT
   FERC.ID_CONTA_LS AS 'Codigo',  
   FERC.DATA_MOVTO  as 'Data_Ini',
   FERC.SEQUENCIAL  AS 'DOC_Ini',     
   FERC.NUMERO_TERMO AS 'TERMO_Ini',
   MVCX.Numliv AS 'LIVRO_Ini',
   MVCX.Numfol AS 'FOLHA_Ini',

 

   MAX(FERC.DATA_MOVTO)  as 'Data_Fin',
   MAX(FERC.SEQUENCIAL)  AS 'DOC_Fin',     
   MAX(FERC.NUMERO_TERMO) AS 'TERMO_Fin',
   MAX(MVCX.Numliv) AS 'LIVRO_Fin',
   MAX(MVCX.Numfol) AS 'FOLHA_Fin',

  SUM(MVCX.QUANTI) AS 'QTD'

    FROM TAB_MVTOCAIXA MVCX, TAB_FERC FERC  
    WHERE FERC.`DATA_MOVTO` BETWEEN :Data_inicial AND :Data_final
    AND FERC.`DATA_PROCES` IS NULL
    AND FERC.`DATA_RECEBE` IS NULL
    AND MVCX.NUMTER=FERC.NUMERO_TERMO
    AND MVCX.DATA_CAIXA=FERC.DATA_CAIXA
    AND MVCX.SEQUENCIAL=FERC.SEQUENCIAL
    GROUP BY FERC.ID_CONTA_LS
    ORDER BY  FERC.ID_CONTA_LS;

 

 

Agradeço antecipadamente a colaboração de todos.

 

Atenciosamente

Marcelo Antônio Pacífico Cavalcanti

Consulta_Dados_FERC.png

Edited by Marcelo_Pacifico
Esclarecer dúvidas

Share this post


Link to post
Share on other sites

Eu não entendi o problema.

 

Um MIN() nos campos de "ini" não resolveria ?

Share this post


Link to post
Share on other sites

Boa tarde.

 

Só para complementar e esclarecer prováveis dúvidas.

Os valores iniciais (campos com "Ini") estão corretos, o que esta errado são os valores finais ("Fin") referente ao Termo, Livro e folha ou seja, para o número do documento final, deveria me retornar os valores mencionados como "esperado" na imagem.

 

Atenciosamente

Marcelo Antônio Pacífico Cavalcanti

 

Share this post


Link to post
Share on other sites

...

  MAX(FERC.DATA_MOVTO)  OVER(PARTITION BY FERC.ID_CONTA_LS)

as 'Data_Fin',

...

 

Só não sei se a quebra (partition) será suficiente ou se mais campos serão precisos.

Share this post


Link to post
Share on other sites
Em 23/08/2019 at 22:23, Motta disse:

...

  MAX(FERC.DATA_MOVTO)  OVER(PARTITION BY FERC.ID_CONTA_LS)

as 'Data_Fin',

...

 

Só não sei se a quebra (partition) será suficiente ou se mais campos serão precisos.

 

Obrigado pelo esforço e tempo gasto. Mas, não deu certo. Vou continuar pesquisando para ver se encontro a solução.

Share this post


Link to post
Share on other sites
Em 26/08/2019 at 18:03, Motta disse:

O que deu errado ?

 

Boa noite

   Vou tentar explicar o que deu errado. A linha que você informou, eu testei na minha query apenas modifiquei o seu apelido, ficou assim: MAX(FERC.DATA_MOVTO)  OVER(PARTITION BY FERC.ID_CONTA_LS) as ' Data_Final'

porém ele não me trás o resultado que seria esperado. O resultado desta  linha é uma duplicação do valor inicial conforme pode ser visto abaixo.

 

Codigo    Data_Ini        Nr_Ini    TERMO_Ini    LIVRO_Ini    FOLHA_Ini    Data_Fin        Data_Final
101        01/07/2019    9291            81029              163            149        31/07/2019    01/07/2019
102        01/07/2019    9257            83504              170            126        31/07/2019    01/07/2019
103        01/07/2019    9240           49225               A57            147        31/07/2019    01/07/2019
120        01/07/2019    9428           66392               114            212        31/07/2019    01/07/2019
127        10/07/2019    11134         78843               156              63        10/07/2019    10/07/2019

 

Também testei com Last_Value() e First_Value() (Presentes a partir da versão 8 do MySQL) e , não obtive os valores esperados.

Acredito que a forma que coloquei a pergunta esta errada não seria o primeiro e ultimo registro, mas sim a primeira e última linha de cada código.

 

Sem Mais.

 

Marcelo Antônio Pacífico Cavalcanti.

Share this post


Link to post
Share on other sites

Talvez se a primeira sql for montanda analitica como uma tabela virtual e aplicar o 'over' em cima desta sql

 

Algo como

 

Select max(campox) over ...

From

(

Select campo1,

             campo2

....

From tabela1,tabela2

Where ...

) virtual

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.