2011-06-17 1 views
1

J'ai une requête SQL très compliquée qui retourne quelques centaines de résultats répartis comme suit:Retour premiers x résultats de chaque groupe dans la requête SQL

user 1 id: ##  stuff 
    user 1 id: ##  stuff 
    user 1 id: ##  stuff 
    .... 
    user 2 id: ###  stuff 
    user 2 id: ###  stuff 
    user 2 id: ###  stuff 
    .... 

pour environ 6 utilisateurs. Il est déjà trié exactement comme je veux, je veux juste le premier 5 pour chaque utilisateur. Y a-t-il un moyen facile de faire ceci? J'utilise PostgreSQL 8.4 btw, et ma connaissance de SQL est limitée, donc essayez de faire des explications pas trop compliquées si possible: D

Répondre

3

Quelque chose comme ça devrait le faire.

SELECT t.user, t.id, t.stuff 
    FROM (SELECT user, id, stuff, 
       ROW_NUMBER() OVER (PARTITION BY user ORDER BY id) AS RowNum 
       FROM YourTable) t 
    WHERE t.RowNum <= 5 
Questions connexes