Marcelo_Pacifico 0 Denunciar post Postado Agosto 22, 2019 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 Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 22, 2019 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
Marcelo_Pacifico 0 Denunciar post Postado Agosto 22, 2019 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
Motta 645 Denunciar post Postado Agosto 22, 2019 Talvez com analytic functions usando o MAX e OVER. Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo_Pacifico 0 Denunciar post Postado Agosto 23, 2019 Boa Tarde. Como ficaria, só mim para testar e verificar se dá certo. Anexo uma amostragem de onde tirei os dados que passai no meu primeiro post. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 24, 2019 ... 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
Marcelo_Pacifico 0 Denunciar post Postado Agosto 26, 2019 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
Motta 645 Denunciar post Postado Agosto 26, 2019 O que deu errado ? Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo_Pacifico 0 Denunciar post Postado Agosto 28, 2019 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
Motta 645 Denunciar post Postado Agosto 29, 2019 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