Saulo Morais Lara escreveu:
> Sim
> 
> -----Mensagem original-----
> De: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Em nome de Leandro
> DUTRA
> Enviada em: quarta-feira, 21 de maio de 2008 17:49
> Para: Comunidade PostgreSQL Brasileira
> Assunto: Re: [pgbr-geral] RES: RES: RES: Ajuda em Select
> 
> 2008/5/21 Saulo Morais Lara <[EMAIL PROTECTED]>:
>> Vamos ver se explico melhor. Esta consulta pegará a ultima compra de cada
>> cliente, e de qto em qto tempo ele compra, a partir da data do pedido.
>> Por exemplo, 1 cliente tem 2 pedidos, um com data de 10/05/2008 e outro
> com
>> 20/05/2008. O prazo de uma compra pra outra foi de 10 dias.
>> Entao saira: Cliente: Fulano, Ultima compra: 20/05/2008, Frequencia: 10
> 
> Você quer uma média?
> 


Isto está com cara dever de casa mas vamos lá:

-- Média de dias entre pedidos
SELECT p3.pedclicod, AVG(p3.dias)
   FROM (SELECT p1.pedclicod, (p1.pddata - MAX(p2.peddata)) AS dias
           FROM pedidos p1 JOIN pedidos p2 ON (p1.pedclicod = 
p2.pedclicod AND p1.peddata > p2.peddata)
           GROUP BY p1.pedclicod) p3
   GROUP BY p3.pedclicod
   ORDER BY p3.pedclicod;

Você tem que prestar atenção em duas condições de contorno que não 
entram no cálculo da média acima:

-- Clientes sem pedidos registrados
SELECT clicod, clinome
   FROM cliente LEFT OUTER JOIN pedidos
        ON (clicod = pedclicod)
   WHERE pedclicod IS NULL;


-- Clientes com um único pedido registrado
SELECT clicod, clinome
   FROM cliente JOIN pedidos
        ON (clicod = pedclicod)
   GROUP BY clicod, clinome
   HAVING count(*) = 1
   ORDER BY clicod;

Osvaldo

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to