【发布时间】:2018-11-05 21:20:45
【问题描述】:
我有一张这样的桌子:
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 次。
【问题讨论】:
-
您可以尝试将时间戳截断到小时,然后按截断的时间戳对结果进行分组?
-
不太明白它的工作原理(我的英语水平很差),你能举个简单的例子吗?
-
这样的:
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); -
我现在没有可用的 postgres 机器来测试这个,但是在 Oracle 中做一个非常相似的事情。
-
这个脚本只返回一天中第一个小时的值,但我需要一天中的所有时间(总共 24 个)
标签: sql postgresql dbeaver