Como selecionar o último registro de cada Grupo MySql


Criando as tabelas de usuários e incluindo informações
CODE
create table `usuario` (
idusuario integer unsigned not null auto_increment,
nome varchar(30),
primary key (idusuario)
) engine=InnoDb;

insert into `usuario`
(nome) values
(“Paulo”),
(“Joao”),
(“Maria”);

create table `noticias` (
idnoticia integer unsigned not null auto_increment,
idusuario integer unsigned default 0,
noticia varchar(50) not null default ”,
datahora timestamp,
primary key (idnoticia)
) engine=InnoDb;

Incluindo algumas notícias…
CODE
insert into `noticias`
(idusuario, noticia, datahora)
values
(1, “Morreu o gato da vovó”, “2009/08/01 10:15:20”),
(1, “O ônibus atrasou hoje”, “2009/08/02 12:25:20”),
(1, “Vovó chora no enterro do gatinho”, “2009/08/03 10:35:00”),
(2, “Preço do Trigo abaixa 5%”, “2009/08/01 10:00:00”),
(2, “Aumenta o Consumo de Carne”, “2009/08/06 18:15:00”),
(3, “Encontrada a cura para a gripe A”, “2009/07/31 18:00:00”),
(3, “Procura-se Susan desesperadamente”, “2009/08/04 10:00:00”);

Selecionando a notícia mais recente de cada usuário. Isso, depois,
será uma subquery.

CODE
select max(datahora), idusuario
from `noticias`
group by idusuario

Agora que sei qual é a notícia mais recente de cada usuário,
ligo as notícias e usuários com essa subquery…
Aí vai um exemplo:

CODE
select a.idusuario, a.noticia, a.datahora
from `noticias` as a
inner join
(select max(datahora) as datahora, idusuario
from `noticias`
group by idusuario
) as b
on (a.idusuario=b.idusuario and a.datahora=b.datahora)

  1. #1 por EDUARDO VIEIRA - 7 de Fevereiro de 2010 em 10:45

    Muito obrigado mesmo por ter escrito esse artigo foi com base nele que conseguir resolver um outro problema que me deixou a noite sem dormi.
    Obrigado mesmo!!!! 🙂

(não será publicado)

*

  1. Sem citações ainda.