如何查询PostgreSQL事件表中最近3条记录的所有行数据平均值
解决PostgreSQL查询最近3条记录DATA平均值的问题
嘿,这个需求很容易搞定,咱们直接上实操方案:
首先得明确「最近3条记录」的排序逻辑——通常是按DATE字段的最新日期来排序,要是你的ID是自增主键(就像示例里那样,ID越大记录越新),用ID排序也没问题,甚至可能更快,因为主键一般都有索引加持。
方案一:子查询写法
这是最常用的方式,内层先筛选出最近3条的DATA字段,外层直接计算平均值:
SELECT AVG(DATA) AS average_recent_data FROM ( -- 取最近3条记录的DATA,按日期倒序;加ID排序是为了日期相同时取最新的ID SELECT DATA FROM events ORDER BY DATE DESC, ID DESC LIMIT 3 ) AS latest_3_events;
方案二:CTE(公共表表达式)写法
如果觉得子查询嵌套看着麻烦,用CTE的可读性会更好:
WITH latest_3_events AS ( SELECT DATA FROM events ORDER BY DATE DESC, ID DESC LIMIT 3 ) SELECT AVG(DATA) AS average_recent_data FROM latest_3_events;
小提醒:
- 如果表中记录不足3条,PostgreSQL会自动计算现有所有记录的
DATA平均值,不需要额外处理边界情况。 - 要是你的
DATE字段没有建索引,按DATE排序可能会慢一点,此时用自增ID排序性能会更优。
内容的提问来源于stack exchange,提问作者OrSmolnik
相关产品推荐
相关产品推荐

