with dados as ( select c.empresa, c.funcionario, max(c.codigo) as ult_cod_caixa, max(c.competencia) as ult_competencia from caixa_inout c left join pessoas usu on c.funcionario = usu.codigo and usu.funcionario = true group by 1,2 ) select c.empresa, c.codigo as caixa, c.funcionario || ' - ' || usu.apelido as usuario, c.competencia, c.abertura, c.fechamento, c.saldoanterior, c.saldoatual from caixa_inout c left join pessoas usu on c.funcionario = usu.codigo --and usu.funcionario = true left join pessoas emp on '000000'||c.empresa = emp.codigo inner join dados d on d.empresa = c.empresa and d.funcionario = c.funcionario --and c.competencia != d.ult_competencia where c.saldoatual != '0.00' and c.fechamento >= '2021-01-01' and c.competencia >= d.ult_competencia and c.codigo >= ult_cod_caixa and c.competencia <= current_date-3 order by c.empresa, c.competencia