【发布时间】:2016-11-30 01:37:43
【问题描述】:
我复制了这篇有用的帖子 Grouped LIMIT in PostgreSQL: show the first N rows for each group? 的逻辑,以按组获取前 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 行。 我怎样才能做到这一点?
此外,我怀疑单个查询可能不是最有效的方法,即使它可以实现。 执行此操作的“最佳实践”方式是什么(当然还有我真正需要在自己的系统上测试的所有条件)
【问题讨论】:
标签: sql postgresql aggregation