2008/5/23 Osvaldo Rosario Kussama <[EMAIL PROTECTED]>:
> 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
>
>


Só mais um detalhe:
Se você tiver mais de um pedido no mesmo dia sua média estará deturpada.
Neste caso você pode criar uma numeração auxiliar (por ex. uma
sequência) e utilizá-la para pegar o próximo pedido.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a