Re: [pgbr-geral] RES: RES: RES: RES: Ajuda em Select

2008-05-23 Por tôpico Osvaldo Rosario Kussama
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


Re: [pgbr-geral] RES: RES: RES: RES: Ajuda em Select

2008-05-23 Por tôpico Osvaldo Kussama
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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] RES: RES: RES: RES: Ajuda em Select

2008-05-21 Por tôpico Saulo Morais Lara
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?

-- 
skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra
+55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED]
+55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803
+55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED]
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

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