Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

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

×

Informação importante

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