【问题标题】:How to average hourly values over multiple days with SQL如何使用 SQL 平均数天的每小时值
【发布时间】:2021-11-28 15:38:03
【问题描述】:

我有一个带有每小时值的 SQL 表 (postgreSQL/TimescaleDB),例如:

Timestamp               Value
...
2021-02-17 13:00:00     2
2021-02-17 14:00:00     4
...
2021-02-18 13:00:00     3
2021-02-18 14:00:00     3
...

我想在特定时间跨度内将每个小时的平均值映射到今天的日期,所以像这样:

select avg(value)
from table
where Timestamp between '2021-02-10' and '2021-02-20'
group by *hourpart of timestamp*

今天(2021-10-08)的结果应该是:

...
Timestamp               Value
2021-10-08 13:00:00     2.5
2021-10-08 14:00:00     3.5
...

如果我明天(2021-10-09)做同样的选择,结果应该变成:

...
Timestamp               Value
2021-10-09 13:00:00     2.5
2021-10-09 14:00:00     3.5
...

【问题讨论】:

  • (1) 请提供查询以创建样本表并插入样本数据并根据该样本描述预期的结果集。 (2) 请告知我们在 SQL Server 上测试过的解决方案是否可以帮助您 - 即使它们使用相同的基本语言 tsql 也可能不适合 postgreSQL)

标签: postgresql timescaledb


【解决方案1】:

我自己解决了这个问题: 解决方案:

SELECT EXTRACT(HOUR FROM table."Timestamp") as hour,
avg(table."Value") as average
from table
where Timestamp between '2021-02-10' and '2021-02-20'
group by hour
order by hour;

【讨论】:

    【解决方案2】:

    你必须这样写你的查询:

    select avg(value)
    from table
    where Timestamp between '2021-02-10' and '2021-02-20'
    group by substring(TimeStamp,1,10), substring(TimeStamp,11,9)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      相关资源
      最近更新 更多