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 關注
- 144 瀏覽
添加回答
舉報