我复制了此帮助帖子的逻辑Grouped LIMIT in PostgreSQL: show the first N rows for each group?以按创建日期排序得到组的前N行。不过,我真的只对具有最小行数的高容量用户感兴趣。这是否必须作为一组两个不同的查询来完成,或者我可以在下面修改我的查询吗?Postgres:每组返回前N行,用于具有最小计数的组
SELECT userid, createdat, displaydate
FROM
(SELECT ROW_NUMBER() OVER
(PARTITION BY userid ORDER BY createdat) as r,
t.* FROM data t) x
WHERE x.r <=100
尤其是我尝试以下,这导致了一个错误:
SELECT userid, createdat, displaydate
FROM
(SELECT ROW_NUMBER() OVER
(PARTITION BY userid ORDER BY createdat) as r,
t.* FROM data t) x
WHERE x.r <=100
HAVING COUNT(*) > 100
理想我会得到每个用户的前100行对于那些谁至少有100行数据的用户。 我该如何做到这一点?
此外,我怀疑单个查询可能不是最有效的方法来做到这一点,即使它是可以实现的。 会是什么“最佳实践”的方式来做到这一点(与我真的需要测试,当然我自己的系统上的所有附带条件)