2017-08-30 1 views
2

j'ai une requête qui va:limite de 3 lignes par ID utilisateur

SELECT users.id, users.name, messages.id, messages.name 

FROM messages 
INNER JOIN users on messages.user_id = users.id 

WHERE users.active = true 

ORDER BY users.id, messages.sent_at 

Ce que je veux pour la requête pour renvoyer les 3 premières lignes pour chaque users.id, est-il possible?

Je n'ai trouvé aucune question similaire à celle-ci dans stackoverflow ou tout autre site. J'apprécie toute réponse ou lien utile. Merci

Répondre

4

Vous pouvez utiliser row_number() dans une sous-requête/table dérivée:

select users_id, users_name, messages_id, messages_name 
from (
    SELECT users.id as users_id, users.name as users_name, messages.id as messages_id, messages.name as messages_name, messages.sent_at 
    , row_number() over (partition by users.id order by messages.sent_at) as rn 
    FROM messages 
    INNER JOIN users on messages.user_id = users.id 
    WHERE users.active = true 
) as sub 
where rn < 4 
ORDER BY users_id, sent_at 
+0

Merci, @SqlZim! Je savais que la réponse serait quelque chose avec les fonctions de Windows, mais je ne savais pas comment faire. – Erick

+0

@Erick Heureux de vous aider! – SqlZim