使用TimescaleDB以更大整数的时间间隔计算平均值

问题描述

我有一个包含以下字段的架构:

       Name of row          |   Type    
  --------------------------+--------
  name                      | string
  value1                    | numeric
  timestamp                 | bigint

这些行包含具有名称,数字值和bigint值的条目,这些值以纳秒为单位存储unix时间戳。使用TimescaleDB,我想使用time_buckets_gapfill来检索数据。鉴于时间戳记存储在bigint中,因此非常麻烦。

我想获取以下时间间隔的汇总数据:5分钟,小时,天,周,月,季度,年。我设法使用普通的time_buckets使其正常工作,但是现在我也想填补空白。我现在正在使用以下查询:

SELECT COALESCE(COUNT(*),0),COALESCE(SUM(value1),time_bucket_gapfill('5 min',date_trunc('quarter',to_timestamp(timestamp/1000000000)),to_timestamp(1599100000),to_timestamp(1599300000)) AS bucket
FROM playground
WHERE name = 'test' AND timestamp >= 1599100000000000000 AND timestamp <= 1599300000000000000
GROUP BY bucket
ORDER BY bucket ASC

这将正确返回值,但不会填充空白。如果我将查询修改为

time_bucket_gapfill('5 min',to_timestamp(timestamp/1000000000),to_timestamp(1599200000))

我会正确获得第一个条目,然后每5分钟清空一行。我该如何运作?谢谢!

Here是一个数据库小提琴,但由于不支持TimeScaleDB而无法正常工作。上面的查询返回以下内容:

  coalesce |       coalesce       |         avg_val
------------------------+-------------------------
     3     |          300         |  2020-07-01 00:00:00+00
     0     |           0          |  2020-09-03 02:25:00+00   
     0     |           0          |  2020-09-03 02:30:00+00

解决方法

您应该在time_bucket_gapfill中使用与表中的数据类型匹配的数据类型。以下查询将为您提供所需的信息:

SELECT
  COALESCE(count(*),0),COALESCE(SUM(value1),time_bucket_gapfill(300E9::BIGINT,timestamp) AS bucket
FROM
  t
WHERE
  name = 'example'
  AND timestamp >= 1599100000000000000
  AND timestamp < 1599200000000000000
GROUP BY
  bucket;
,

我已经设法根据Sven的答案来解决它。它首先使用他的函数来填补空白,然后将date_trunc称为消除多余的行。

WITH gapfill AS (
    SELECT 
        COALESCE(count(*),0) as count,0) as sum,timestamp) as bucket
    FROM
        playground
    WHERE
        name = 'test'
        AND timestamp >= 1599100000000000000
        AND timestamp < 1599300000000000000
    GROUP BY
        bucket
)
SELECT
    SUM(count),SUM(sum),date_trunc('quarter',to_timestamp(bucket/1000000000)) as truncated
FROM 
    gapfill
GROUP BY truncated
ORDER BY truncated ASC

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...