问题描述
我有下表:
日期 | 价值 | 平均 |
---|---|---|
2021-04-07 18:00:00 | 5 | |
2021-04-07 18:00:00 | 10 | |
2021-04-07 18:02:00 | 5 | |
2021-04-07 18:02:00 | 4 | |
2021-04-07 18:03:00 | 5 | |
2021-04-07 18:03:00 | 8 |
我想知道如何计算具有相同时间戳的值的平均值,如下所示:
日期 | 价值 | 平均 |
---|---|---|
2021-04-07 18:00:00 | 5 | 7,5 |
2021-04-07 18:00:00 | 10 | 7,5 |
2021-04-07 18:02:00 | 5 | 4,5 |
2021-04-07 18:02:00 | 4 | 4,5 |
2021-04-07 18:03:00 | 5 | 6,5 |
2021-04-07 18:03:00 | 8 | 6,5 |
我还想知道在单独的表上计算平均值是否更容易,这样它们就不会重复,因为有不止一行具有相同的时间戳。 希望有人能帮我解决这个问题,提前致谢。
解决方法
在内部选择中,使用 avg
获取 group by date
。然后 join
date
等于内部选择 date
的记录。
SELECT t1.date,t2.value,t1.average
FROM
(SELECT date,AVG(Cast(value as Float)) as average
FROM yourTable
GROUP BY date) t1 JOIN yourTable t2 ON t1.date = t2.date
结果:dbfiddle
,SELECT CAST(date AS DATE) as DateField,AVG(value) as avg_value
FROM MyTable
GROUP BY CAST(date AS DATE)
,
一个简单的查询:
SELECT date,AVG(value) as avg_value FROM MyTable GROUP BY date
使用窗口函数:
select t.*,avg(value) over (partition by date) as timestamp_average
from t;