Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
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>
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.saldowhere f2.id = (SELECT max(f3.id)
FROM fluxo f3
where f3.data = f2.data)) v2
where v1.id = v2.idCara, 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
É só a forma de "arrumar".
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