Marcelo_Pacifico 0 Denunciar post Postado Agosto 22, 2019 (editado) 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 Editado Agosto 22, 2019 por Marcelo_Pacifico Esclarecer dúvidas 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