2009-08-10 9 views
1

Say j'ai une table:MySQL requête limite groupwise

create table foo (
    corp_id int not null, 
    tdate date not null, 
    sec_id int unsigned not null, 
    amount int unsigned not null, 
    primary key (corp_id, sec_id, tdate) 
); 

La requête suivante retourne la somme de la colonne de montant pour tous les années corp_id et dates:

select corp_id, tdate, sum(amount) from foo group by corp_id, tdate; 

Comment puis-je maintenant limiter cette requête pour retourner uniquement les 5 dernières dates les plus récentes par corp_id?

Répondre

3

Vous pouvez utiliser une sous-requête pour déterminer ce que la date du cinquième était pour chaque corp_id:

select 
    corp_id, 
    tdate, 
    sum(amount) 
from 
    foo f 
where 
    tdate >= 
     (select tdate 
      from foo 
      where corp_id = f.corp_id 
      order by tdate desc 
      limit 1 offset 4) 

Le limit 1 offset 4 signifie que vous allez à la cinquième enregistrement de la requête, puis choisir une seule ligne. Consultez le MySQL docs pour plus d'informations sur LIMIT et OFFSET.