murilo 0 Denunciar post Postado Junho 14, 2009 Meus Amigos, Nunca fui bom com consulta SQL, portanto recorro a ajuda dos mais experientes. Tenho a seguinte estrutura de banco de dados: tblCliente(Id, nome, UF) tblBoleto(Id, numero, valor, vencimento, pago, dataPagamento) tblClienteBoleto(Id, IdCliente, IdBoleto) Preciso pegar todos os boletos que estão em atraso (pago = 0 e vencimento < hoje) e informar o nome e UF de cada cliente. O mesmo cliente tem N boletos e, com certeza, muitos tem mais de um em atraso. Posso contar com a ajuda de vocês??? Atenciosamente, Compartilhar este post Link para o post Compartilhar em outros sites
Ilano 0 Denunciar post Postado Junho 14, 2009 Olá murilo, tblCliente(Id, nome, UF) tblBoleto(Id, numero, valor, vencimento, pago, dataPagamento) tblClienteBoleto(Id, IdCliente, IdBoleto) você pode fazer o seguinte: SELECT CB.Id, CB.IdCliente, C.nome, C.UF, CB.IdBoleto, B.numero, B.valor, B.vencimento, B.pago, B.dataPagamento FROM tblClienteBoleto CB INNER JOIN tblCliente C ON (CB.IdCliente = C.Id) INNER JOIN tblBoleto B ON (CB.IdBoleto = B.Id) -- FORMATO BRASILEIRO (DD/MM/YYYY) WHERE B.pago = 0 AND B.vencimento < DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY), "%d/%m/%Y") -- FORMATO AMERICANO (YYYY/MM/DD) -- WHERE B.pago = 0 AND B.vencimento < DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY), "%Y/%m/%d") ORDER BY CB.IdCliente, B.vencimento Outra forma bem mais simples e mais eficaz, seria esta: SELECT CB.Id, CB.IdCliente, C.nome, C.UF, CB.IdBoleto, B.numero, B.valor, B.vencimento, B.pago, B.dataPagamento, DATEDIFF(B.dataPagamento, B.vencimento) ATRASOS --ESTA LINHA JÁ CALCULA OS DIAS EM ATRASO FROM tblClienteBoleto CB INNER JOIN tblCliente C ON (CB.IdCliente = C.Id) INNER JOIN tblBoleto B ON (CB.IdBoleto = B.Id) WHERE B.pago = 0 HAVING ATRASOS > 0 ORDER BY CB.IdCliente, B.vencimento Espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites