Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 每个用户id限制3行_Sql_Postgresql_Greatest N Per Group - Fatal编程技术网

Sql 每个用户id限制3行

Sql 每个用户id限制3行,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我有一个疑问: 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或任何其他网站上都没有发现类似的

我有一个疑问:

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或任何其他网站上都没有发现类似的问题。我感谢您的回答或有用的链接。谢谢

您可以在子查询/派生表中使用行号:

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

谢谢你,@SqlZim!我知道答案是windows功能,但不知道怎么做。@Erick很乐意帮忙!