Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dinaerteneto

group by order by

Recommended Posts

Olá galera do imaster

estou com uma dúvida que considero que seja simples, entretanto

não consegui resolver.

 

estou fazendo uma consulta:

 

SELECT * FROM tabela1 GROUP BY idTabela2 ORDER BY idTabela1 DESC;

minha intenção é retornar os últimos registros da tabela, ou melhor

os últimos registros do group by.

O que está acontecendo é que apenas consigo trazer o primeiro registro do grupo.

 

Já tentei assim tb:

SELECT DISTINCT MAX(idTabela1), campo FROM execProposta GROUP BY idTabela2;

neste caso o que ocorre é que consigo trazer os últimos registros de "idTabela1", porém o mesmo não ocorre com "campo".

 

Aguardo respostas.

Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigão,

 

Acho que o conceito que você tem sobre GROUP BY está um pouquinho fora do que realmente é. A clásula GROUP BY te possibilitará agrupar registros em conjunto com uma função de agregação, ou seja, COUNT(*), COUNT(), AVG() e por aí vai...pelo que eu entendi, você deseja somente ordenar os registros de forma decrescente, ou seja, do maior para o menor, do último para o primeiro!

 

SELECT campo1, campo2, campon
FROM tabela
ORDER BY campo1 DESC;

 

Caso você deseja limitar a quantidade de últimos registros, use LIMIT, assim:

 

SELECT campo1, campo2, campon
FROM tabela
ORDER BY campo1 DESC LIMIT 5;

 

Faça os testes e veja se é isso que deseja fazer...abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Wagner,

 

na verdade eu quero ordenar os registros por ondem decrescente, mas não somente.

 

Digamos que eu tenha algo como:

 

mysql> select * from execProposta order by idExecProposta desc;+----------------+------------+-----------+--------+--------------+--------------------+| idExecProposta | idProposta | idUsuario | status | dataAtualiza | desc			   |+----------------+------------+-----------+--------+--------------+--------------------+|			  7 |		  4 |		 1 | 2	  | 2007-09-28   | 80 horas.		  ||			  6 |		  4 |		 3 | 1	  | 2007-09-27   | Proposta definida. ||			  5 |		  3 |		 3 | 3	  | 2007-09-27   | 50 horasaprovado. ||			  4 |		  3 |		 1 | 2	  | 2007-09-27   | 50 horas.		  ||			  3 |		  3 |		 1 | 1	  | 2007-09-27   | Proposta definida. |+----------------+------------+-----------+--------+--------------+--------------------+5 rows in set (0.00 sec)

porém quero trazer apenas os registros 5 e 7, que são os últimos registros

referente ao idProposta.

 

quando uso

 

mysql> select * from execProposta group by idProposta;+----------------+------------+-----------+--------+--------------+--------------------+| idExecProposta | idProposta | idUsuario | status | dataAtualiza | desc			   |+----------------+------------+-----------+--------+--------------+--------------------+|			  3 |		  3 |		 1 | 1	  | 2007-09-27   | Proposta definida. ||			  6 |		  4 |		 3 | 1	  | 2007-09-27   | Proposta definida. |+----------------+------------+-----------+--------+--------------+--------------------+2 rows in set (0.05 sec)

então tenho o grupo de idProposta, mas não os últimos registros destes.

 

Pergunto...

Como posso fazer isso?

 

Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá Wagner,o IN não resolve meu problema neste caso,por que nem sempre vou saber qual é o ID,minha intenção é trazer somente os últimos registros da coluna idProposta, como se fosse o group by,entretanto o group by me traz os primeiros registros do grupo.entendeu?Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Podemos trazer as últimas duas propostas com base nos maiores idExecProposta, que me parece ser auto_increment, ok?

 

SELECT MAX(idExecProposta)
FROM tabela
ORDER BY idExecProposta LIMIT 2

 

Tenta aí... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Wagner,o campo é realmente auto_increment,desta forma funciona, mas ele só traz os últimos idExecProposta,se eu quiser trazer os outros registros também, como devo proceder?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para retornar as linhas das últimas datas de cada idProposta.

 

select * from execProposta awhere dataAtualiza = (  select max(dataAtualiza)  from execProposta b  where b.idProposta = a.idProposta)group by idProposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw...Muito obrigado Eclesiastes...é isso mesmo

Para retornar a última data de cada idProposta.

select * from execProposta awhere dataAtualiza = (  select max(dataAtualiza)  from execProposta b  where b.idProposta = a.idProposta)group by idProposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.