Dúvida na Consulta MySQL

53 views
Skip to first unread message

Carlos Martins

unread,
Mar 26, 2013, 1:01:30 PM3/26/13
to Lista PHPBR
Galera estou com a seguinte dúvida em uma consulta MySQL.

Estou precisando saber qual foi o último pedido de um determinado período.
Tipo assim:

Eu tenho a seguinte tabela de pedidos:

Id    Cliente    Data              Quant
1     01           2012-10-01    5
2     01           2012-12-05    10
3     02           2012-12-05    5
4     03           2012-12-06    4
5     04           2012-12-07    8
6     03           2012-12-09    8
7     03           2012-12-10    10
8     04           2012-12-11    5

Ou seja, eu quero saber qual o último pedido de cada cliente no período entre 2012-01-01 e 2012-12-31. Sendo assim o meu retorno deverá ser como no exemplo abaixo:

Id    Cliente    Data              Quant
2     01           2012-12-05    10
3     02           2012-12-05    5
7     03           2012-12-10    10
8     04           2012-12-11    5

Se alguem puder me ajudar agradeço em muito.

Um ótimo dia para todos.

Grande abraço.

Carlos Martins

Luciano Bezerra

unread,
Mar 26, 2013, 11:11:09 PM3/26/13
to PHP-Br

Sql. Select cliente, max(data) from tabela group by cliente

Nao testei, mas o caminho eh esse.

--
--
---
Você recebeu esta mensagem por estar inscrito no grupo "PHP BR"
 
*** NÃO ESQUEÇA: As regras do grupo estão disponíveis em nossa Wiki:
http://wiki.phpbr.com.br/index.php/Regras_de_Utiliza%C3%A7%C3%A3o_da_Lista
 
Para enviar mensagens para o grupo, envie e-mails para lista...@googlegroups.com
Para cancelar sua inscrição neste grupo, envie e-mail para lista-phpbr...@googlegroups.com
Para mais opções visite este grupo em: http://groups.google.com/group/lista-phpbr
---
Você está recebendo esta mensagem porque se inscreveu no grupo "PHPBR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para lista-phpbr...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 

Er Galvao Abbott

unread,
Mar 26, 2013, 11:33:12 PM3/26/13
to lista...@googlegroups.com
Consulta complicada, mas vou tentar ajudar:

Uma instrução "between" em sua cláusula "where" define o período. O agrupamento por cliente separa ("agrupa") os registros por cliente, e o "order Id desc" ordena pelo Id de forma descendente, ou seja, mostrando os pedidos de Id maior (e por consequência inseridos mais recentemente)
primeiro.

SELECT * FROM tabela WHERE Data BETWEEN '2012-01-01' AND '2012-12-31' GROUP BY Cliente ORDER BY Id desc

O único problema possível com essa query é que ela provavelmente mostrará todos os pedidos de cada cliente neste período e não apenas o último (se não me engano). Para mostrar apenas o último você provavelmente teria que incluir uma subquery, mas vamos devagar.

Testa e nos conta se funciona.

Er Galvão Abbott
http://www.galvao.eti.br/

Leandro Correa dos Santos

unread,
Mar 26, 2013, 11:33:07 PM3/26/13
to lista...@googlegroups.com
talvez acrescentando " order by Data desc limit 1"...
--

Er Galvao Abbott

unread,
Mar 26, 2013, 11:35:53 PM3/26/13
to lista...@googlegroups.com
O problema é que o limit vai limitar o recordset inteiro, ou seja vai mostrar apenas um registro, independente do número de clientes ou do número de pedidos. Por isso é que nesse caso vai precisar de subquery.

Er Galvão Abbott
http://www.galvao.eti.br/

Luís Henrique Faria

unread,
Mar 27, 2013, 12:01:11 AM3/27/13
to lista...@googlegroups.com
Vai precisar de subquery mesmo... Se fosse possível ordenar antes de agrupar, aí dava, mas não funciona assim.

Algo tipo assim me parece funcionar:

SELECT
*
FROM
(SELECT * FROM pedidos WHERE data BETWEEN '2012-10-10' AND '2013-01-01' ORDER BY data DESC) AS pedidos
GROUP BY cliente;

Aí com o between você consegue definir o período que precisar, como apontou o Er.


2013/3/27 Er Galvao Abbott <gal...@galvao.eti.br>

Carlos Martins

unread,
Mar 27, 2013, 1:01:20 AM3/27/13
to lista...@googlegroups.com
Galera muito obrigado a todos mesmo pela ajuda. Foi de grande valia.

Eu consegui com subquery.

Grande abraço a todos.

Att.

Carlos Martins
Reply all
Reply to author
Forward
0 new messages