我複製了此幫助帖子的邏輯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行數據的用戶。 我該如何做到這一點?
此外,我懷疑單個查詢可能不是最有效的方法來做到這一點,即使它是可以實現的。 會是什麼「最佳實踐」的方式來做到這一點(與我真的需要測試,當然我自己的系統上的所有附帶條件)