Fharley 0 Denunciar post Postado Junho 9, 2010 No SELECT abaixo, o campo max(src_reprograma.para) as max_para só retorna o valor maior se não for incluída condição na clausula where para o mesmo: $sql3 = "SELECT "; $sql3 .= "src_atividoc.numero as numero_atdc,"; $sql3 .= "src_atividoc.num_doc as num_doc_atdc,"; $sql3 .= "src_atividoc.num_ativ as num_ativ_atdc,"; $sql3 .= "src_atividoc.responsavel as responsavel_atdc,"; $sql3 .= "src_atividoc.prazo as prazo_atdc,"; $sql3 .= "src_atividoc.conclusao as conclusao_atdc,"; $sql3 .= "src_atividades.numero as numero_atividades,"; $sql3 .= "src_atividades.nome as nome_atividades,"; $sql3 .= "src_docs.numero as numero_docs,"; $sql3 .= "src_docs.num_ativ as num_ativ_docs,"; $sql3 .= "src_docs.documento as documento_docs,"; $sql3 .= "src_docs.assunto as assunto_docs,"; $sql3 .= "src_docs.responsavel as responsavel_docs,"; $sql3 .= "src_usuarios.numero as num_usu,"; $sql3 .= "src_usuarios.nome as nome_usu,"; $sql3 .= "src_usuarios.iniciais as iniciais_usu,"; $sql3 .= "src_reprograma.num_ativ as num_ativ_rep,"; $sql3 .= "max(src_reprograma.para) as max_para "; $sql3 .= "FROM "; $sql3 .= "(((src_atividoc LEFT JOIN src_atividades ON src_atividoc.num_ativ = src_atividades.numero) "; $sql3 .= "LEFT JOIN src_docs ON src_docs.num_ativ=src_atividades.numero) "; $sql3 .= "LEFT JOIN src_usuarios ON src_atividoc.responsavel=src_usuarios.numero) "; $sql3 .= "LEFT JOIN src_reprograma ON src_atividoc.numero=src_reprograma.num_ativ "; $sql3 .= "where src_atividoc.num_doc=".$num; $sql3 .= " and case when src_reprograma.para>0 then src_reprograma.para else src_atividoc.prazo end between ".$_SESSION["xinicio"]." and ".$_SESSION["xfim"];} $sql3 .= " group by src_atividoc.numero,src_reprograma.num_ativ order by src_atividades.nome"; Exemplo do problema: src_atividoc.prazo = 01/01/2010 (prazo inicial da atividade) src_reprograma.para = 01/02/2010 (primeira reprogramação) src_reprograma.para = 01/03/2010 (segunda reprogramação) src_reprograma.para = 01/04/2010 (terceira reprogramação) Desejo que o maior valor do campo src_reprograma.para seja selecionado, porem, usando os dados do exemplo, quando a clausula where condiciona o campo src_reprograma.para entre 01/01/2010 e 01/03/2010, o retorno é 01/03/2010 e não 01/04/2010. O que está errado na query ou teria outra maneira de construí-la? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Junho 9, 2010 Provavelmente erro de tipo o tipo definido na tabela não deve ser data ou algo assim. Compartilhar este post Link para o post Compartilhar em outros sites
Fharley 0 Denunciar post Postado Junho 9, 2010 Provavelmente erro de tipo o tipo definido na tabela não deve ser data ou algo assim. Motta, No campo src_reprograma.para e no campo src_atividoc.prazo uso tipo numerico (int) para guardar as datas no formato YYYYMMDD. A query está funcionando parcialmente e não recebo nenhum retorno de erro de incompatibilidade de tipo. As variáveis $_SESSION["xinicio"] e $_SESSION["xfim"] tem sempre o mesmo formato YYYYMMDD dos campos mencionados. Preciso que o retorno do campo max(src_reprograma.para) as max_para seja incondicionalmente o maior valor da tabela e não seja influenciado pela condição da cláusula where. Agradeço pelo apoio. Compartilhar este post Link para o post Compartilhar em outros sites