You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:46:35