Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Preciso de ajuda com MAX(data)...


Tchello

Pergunta

Tenho num relatório um combox:

=> de 30 a 59 dias = opção 1;

=> de 60 a 89 dias = opção 2;

=> de 90 a 179 dias = opção 3;

=> de 180 a 359 dias = opção 4;

=> acima de 360 dias = opção 5;

e o seguinte select:

SELECT cliente, MAX(data) AS data, DATEDIFF(CURDATE(), MAX(data)) AS dias FROM tabela;

WHERE data BETWEEN $data_ini AND $data_fim;

Aí o resultado vem certo (mais o menos), o problema é que quando seleciono a opção 2 por exemplo, me retorna os cliente dentro daquele periodo, mas se a última data for a menos de 60 dias não deveria aparecer, ou seja pega sempre a última data do período selecionado.

Alguém tem alguma idéia de como posso fazer para somente retornar se a última data do DB estiver dentro do período selecionado?

Desde já agradeço a ajuda...

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Para mostrar todos os clientes use o group by:

select cliente, max(data) as data, datediff(curdate(), max(data)) as dias 
from tabela;
where data between $data_ini and $data_fim
group by cliente
Dê um echo na string de consulta para saber exatamente o que está sendo passado como data inicial e data final:
$sql = "select ...";
echo $sql;
Para não ter que ficar calculando data no PHP passe os dias inicial e final para a consulta SQL:
select cliente, max(data) as data, datediff(curdate(), max(data)) as dias 
from tabela;
where data between curdate() - interval $dias_ini day and curdate() - interval $dias_fim day
group by cliente

Link para o comentário
Compartilhar em outros sites

  • 0

O Meu problema não é com as datas, vou tentar explicar melhor, ex.:

no banco de dados:

cliente | data

Cliente 1 | 2011-01-12

Cliente 1 | 2011-02-10

Cliente 1 | 2011-03-05

Cliente 1 | 2011-02-12

Cliente 1 | 2011-03-15

Aí quando faço o SELECT:

$sql = SELECT cliente, MAX(data) AS data, DATEDIFF(CURDATE(), MAX(data)) AS dias FROM tabela;

WHERE data BETWEEN '2011-02-01' AND '2011-02-28';

Retorna:

Cliente - Data - Dias

Cliente 1 - 2011-02-12 59 (isto está correto, pois se trata da última data dentro do período selecionado);

Porém a última data do Cliente 1 é '2011-03-15', preciso que se á última data do DB não esteja dentro do período selecionado retorne nulo...

Editado por Tchello
Link para o comentário
Compartilhar em outros sites

  • 0

select cliente, max(data) as data, datediff(curdate(), max(data)) as dias 
from tabela t
where 
    data between '2011-02-01' and '2011-02-28'
    and
    (
        select max(data) 
        from tabela 
        where cliente = t.cliente
    ) <= '2011-02-28'
group by cliente

Só que no caso que você descreve não vai voltar nulo. Vai voltar zero linhas.

Editado por Kakao
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...