从PostgreSql中的多个选择中获取数据(使用DBeaver)

时间:2018-11-05 21:20:45

标签: sql postgresql dbeaver

我有一张这样的桌子:

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次。

1 个答案:

答案 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);

该想法是使所有时间戳仅精确到小时。然后选择当天出现的所有记录(按小时分组)。对每个小时分组内的值执行平均操作。