2 回答

TA贡献1829条经验 获得超4个赞
一种方法是带过滤的聚合查询:
select fix_id, timestamp, avg(age)
from t
where age > 0 and
timestamp = (select max(t2.timestamp) from t t2 where t2.fix_id = t.fix_id)
group by fix_id;

TA贡献1852条经验 获得超7个赞
如果您在查询中设置条件,例如:
WHERE age > 0
0那么您将错过最大时间戳仅在列中包含 sage并且您不会fix_id在结果中得到它的情况。
所以使用条件聚合:
SELECT t.fix_id, t.timestamp,
AVG(CASE WHEN t.age > 0 THEN t.age END) average_age
FROM tablename t
WHERE t.timestamp = (SELECT MAX(timestamp) FROM tablename WHERE fix_id = t.fix_id)
GROUP BY t.fix_id, t.timestamp
请参阅演示。
结果:
| fix_id | timestamp | average_age |
| ------ | --------- | ----------- |
| 5 | 4 | 3 |
| 10 | 4 | 2 |
- 2 回答
- 0 关注
- 121 浏览
添加回答
举报