PostgreSQL:获取最新X条记录后按property_id分组统计的查询方案
解决PostgreSQL分组统计最新X条记录的问题
问题分析
你原本的SQL语句存在两个核心问题:
- 逻辑顺序错误:应该先获取最新的X条记录,再对这些记录分组统计,但你先执行了分组操作,得到的是全量数据的分组结果,而非最新X条记录的统计。
- 违反分组规则:分组后
created_on_utc字段既不在GROUP BY子句中,也未被聚合函数处理,PostgreSQL无法确定用该字段的哪个值来排序,因此抛出错误(错误信息里的pa.created_at是笔误,实际对应表字段created_on_utc)。
正确SQL写法
通过子查询先筛选出最新的X条记录,再对这些记录进行分组统计:
SELECT property_id, COUNT(id) AS record_count FROM ( -- 先获取最新的X条记录,将1000替换为你需要的具体数量 SELECT id, property_id FROM adjustments ORDER BY created_on_utc DESC LIMIT 1000 ) AS latest_records GROUP BY property_id -- 可选:按统计数量从多到少排序 ORDER BY record_count DESC;
说明
- 子查询部分通过
ORDER BY created_on_utc DESC和LIMIT筛选出最新的X条记录,确保后续统计的是目标数据集。 - 外层查询对筛选后的记录按
property_id分组,用COUNT(id)统计每组的记录数量。
内容的提问来源于stack exchange,提问作者user23499875
相关产品推荐
相关产品推荐

