2017-08-30 10 views
2

私が行くのクエリを持っている:リミット3行

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 

私が欲しいのクエリは、各users.idのために最初の3行を返すようにするために、それは可能ですか?

私はstackoverflowまたは他のサイトでこれに似た疑問を見つけませんでした。私はどんな答えや役に立つリンクに感謝します。おかげ

答えて

4

あなたはサブクエリ/派生テーブル内row_number()を使用することができます。

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

は、@SqlZimをありがとう!私は、答えがWindows機能で何かになることは知っていたが、それを行う方法をかなり知っていなかった。 – Erick

+0

@エリックお手伝いします! – SqlZim