Ir para conteúdo
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

Editado por Marcelo_Pacifico
Esclarecer dúvidas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi o problema.

 

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

Compartilhar este post


Link para o post
Compartilhar em outros 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

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.