Re: [pgbr-geral] RES: RES: RES: RES: Ajuda em Select
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/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
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