代码之家  ›  专栏  ›  技术社区  ›  Erick

每个用户id限制3行

  •  4
  • Erick  · 技术社区  · 8 年前

    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
    

    我想要的是查询返回每一行的前3行 users.id ,可能吗?

    我在stackoverflow或任何其他网站上都没有发现任何类似的问题。我感谢您的回答或有用的链接。谢谢

    1 回复  |  直到 8 年前
        1
  •  4
  •   SqlZim    8 年前

    您可以使用 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