我有一张这样的桌子:
10/10/2018 00:00 | 5
10/10/2018 00:10 | 7
10/10/2018 00:20 | 9
...
10/10/2018 23:40 | 5
10/10/2018 23:50 | 6
我需要获取小时数的平均值,并返回所有小时平均值(从00:00到23:00)
我可以得到两个小时的平均值:
(select avg(value)
from public.table
where time_stamp between TO_TIMESTAMP('2018-11-05 20:00:00', 'YYYY-MM-DD HH24:MI:SS')
and
TO_TIMESTAMP('2018-11-05 20:00:00', 'YYYY-MM-DD HH24:MI:SS') + interval '1 hour')
UNION ALL
(select avg(value)
from public.table
where time_stamp between TO_TIMESTAMP('2018-11-05 21:00:00', 'YYYY-MM-DD HH24:MI:SS')
and
TO_TIMESTAMP('2018-11-05 21:00:00', 'YYYY-MM-DD HH24:MI:SS') + interval '1 hour')
但是如何在某个循环中获得所有24个平均值?我不想将此SQL复制24次。
答案 0 :(得分:0)
尝试一下
select
date_trunc('hour', time_stamp), avg(value)
from
public.table
where
date_trunc('day', time_stamp) = date_trunc('day', TO_TIMESTAMP('2018-11-05 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
group by
date_trunc('hour', time_stamp);
该想法是使所有时间戳仅精确到小时。然后选择当天出现的所有记录(按小时分组)。对每个小时分组内的值执行平均操作。