Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fharley

MAX(campo) não retorna maior valor

Recommended Posts

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
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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.