【问题标题】:Get data from multiple selects in PostgreSql (using DBeaver)从 PostgreSql 中的多个选择中获取数据(使用 DBeaver)
【发布时间】: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


【解决方案1】:

试试这个

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

我们的想法是让所有时间戳都只精确到小时。然后选择当天出现的所有记录,按小时分组。对每个小时分组内的值进行平均。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2014-07-07
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多