SQL查询需求:计算表中最近10分钟twa列的平均值
解决OF50表最后10分钟twa列平均值的SQL查询问题
问题分析
你当前的查询存在几个关键错误:
- 时间间隔写错:用了
INTERVAL '1 minutes'而非需求的10 minutes - 条件逻辑反转:原条件筛选的是早于最后时间减1分钟的记录,和需求的「最后10分钟范围」完全相反
- 字段选择不规范:同时选择聚合函数
AVG(twa)和非聚合字段horaire,未加GROUP BY会导致结果混乱(数据库可能返回任意一条horaire和平均值,不符合预期)
正确查询写法
写法1:子查询获取最新时间
SELECT AVG(twa) AS avg_twa FROM OF50 WHERE horaire >= (SELECT MAX(horaire) FROM OF50) - INTERVAL '10 minutes' AND horaire <= (SELECT MAX(horaire) FROM OF50);
写法2:用CTE避免重复子查询(更易读)
WITH latest_record AS ( SELECT MAX(horaire) AS last_time FROM OF50 ) SELECT AVG(o.twa) AS avg_twa FROM OF50 o, latest_record lr WHERE o.horaire >= lr.last_time - INTERVAL '10 minutes' AND o.horaire <= lr.last_time;
说明
MAX(horaire)用来获取表中最后一条记录的时间(比ORDER BY horaire DESC LIMIT 1更高效)- 条件
horaire >= 最后时间 - 10分钟 AND horaire <= 最后时间精准锁定目标时间范围 - 只返回
AVG(twa)并命名为avg_twa,结果清晰符合需求
内容的提问来源于stack exchange,提问作者Seji
相关产品推荐
相关产品推荐

