brino 0 Denunciar post Postado Outubro 18, 2012 Estou tentando fazer um SELECT utilizando o GROUP BY por data e selecionando o ultimo registro do período. Tenho uma tabela fluxo de caixa. id data entrada saida saldo 1 2012-10-01 300,00 0,00 300,00 2 2012-10-01 30,00 0,00 330,00 3 2012-10-01 0,00 100,00 230,00 4 2012-10-02 0,00 50,00 180,00 5 2012-10-02 180,00 0,00 360,00 6 2012-10-03 50,00 0,00 410,00 7 2012-10-03 0,00 110,00 300,00 SELECT id, data, sum(entrada) as entrada, sum(saida) AS saida, saldo FROM fluxo GROUP BY data; id data entrada saida saldo saldo(esperado) 1 2012-10-01 330,00 100,00 300,00 230,00 (id = 3) 4 2012-10-02 180,00 50,00 180,00 360,00 (id = 5) 6 2012-10-03 50,00 110,00 410,00 300,00 (id = 7) Só que nesse consulta, o saldo que me retorna é o do primeiro registro do período, quero que retorne o ultimo saldo do período. Como faria para retornar o ultimo registro do campo saldo nesse SELECT? Não sei se é possível, mas espero que tenha alguma maneira de resolver isso. Obrigado e no aguardo. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 18, 2012 Combine este dos selects SELECT id, data, sum(entrada) as entrada, sum(saida) AS saida FROM fluxo GROUP BY data SELECT id, data, saldo FROM fluxo f2 where id = (SELECT max(id) FROM fluxo f3 where f3.data = f2.data) Compartilhar este post Link para o post Compartilhar em outros sites
brino 0 Denunciar post Postado Outubro 18, 2012 Motta, Entendi o que você quis dizer, mas como faria para colocar isso tudo em um select apenas? Tentei colocar isso com um inner join, mas ele me retorna sempre o maior valor da tabela. SELECT a.id, a.data, sum(a.entrada) AS entrada, sum(a.saida) AS saida, b.saldo FROM tb a INNER JOIN tb AS b ON b.id = (SELECT max(c.id) FROM tb c) GROUP BY a.data id data entrada saida saldo 3 2012-10-01 330,00 100,00 300,00 5 2012-10-02 180,00 50,00 300,00 7 2012-10-03 50,00 110,00 300,00 No caso me retorna apenas o ultimo saldo da tabela e não do período em questão. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 18, 2012 select v1.id, v1.data,v1.entrada, v1.saida , v2.saldo from (SELECT id, data, sum(entrada) as entrada, sum(saida) AS saida FROM fluxo GROUP BY data) v1, (SELECT id, data, saldo FROM fluxo f2 where id = (SELECT max(id) FROM fluxo f3 where f3.data = f2.data) v2 where v1.id = v2.id and v1.data = v2.data Compartilhar este post Link para o post Compartilhar em outros sites
brino 0 Denunciar post Postado Outubro 18, 2012 select v1.id, v1.data,v1.entrada, v1.saida , v2.saldo from (SELECT id, data, sum(entrada) as entrada, sum(saida) AS saida FROM fluxo GROUP BY data) v1, (SELECT id, data, saldo FROM fluxo f2 where id = (SELECT max(id) FROM fluxo f3 where f3.data = f2.data) v2 where v1.data = v2.data select v1.id, v1.data, v1.entrada, v1.saida , v2.saldo from (SELECT id, data, sum(entrada) as entrada, sum(saida) AS saida FROM fluxo GROUP BY data) v1, (SELECT f2.id, f2.data, f2.saldo FROM fluxo f2 where f2.id = (SELECT max(f3.id) FROM fluxo f3 where f3.data = f2.data)) v2 where v1.id = v2.id and v1.data = v2.data Cara, nunca usei select dessa maneira, muito diferente. Coisas só de quem conhece muita coisa, hehe. Fiz como você sugeriu, mas esta me retornando um erro. Unknown column 'v1.entrada' in 'field list' @Edit, Olha vi aqui qual foi o erro, mas quando fui ver o resultado, me retornou apenas o ultimo período apenas. @Edit novamente, Descobri, tinha que retirar uma condição: v1.id = v2.id Obrigado e abraço Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 19, 2012 É só a forma de "arrumar". Compartilhar este post Link para o post Compartilhar em outros sites