【问题标题】:Get 1 Year results from TimescaleDB从 TimescaleDB 获取 1 年结果
【发布时间】:2019-04-23 01:01:10
【问题描述】:

我有一个包含 IoT 设备数据的表格,每小时发送一次测量值。必须获取今天、周、月和年的报告。

使用 timescaleDB,我得到了今天、周和月的一些“好的”结果。例如每月:

   SELECT
      time_bucket('4 weeks', measured_at) AS month,
      MAX(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) - MIN(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) as consumption
      FROM readings
      WHERE device_id = 4
      GROUP BY month
      ORDER BY month DESC LIMIT 12;

但是多年来找不到获取值的好方法吗?有人试过吗?

时间刻度不支持年份,使用周会导致错误结果。

错误:不支持以月、年、世纪等形式定义的间隔

【问题讨论】:

  • 到底是什么问题?用'1 year' 代替'4 weeks' 不行吗?
  • 不支持年:错误:不支持按月、年、世纪等定义的间隔

标签: sql postgresql timescaledb


【解决方案1】:

请确保您知道您实际与 time_bucket 聚合了哪些数据:

TIMESTAMPTZ 参数按 UTC 时间存储。所以桶的对齐是在UTC时间。这样做的一个后果是,每日存储桶与 UTC 午夜对齐,而不是本地时间。

正如@TmTron 已经指出的,几个月和几年的实际正确版本将是使用date_trunc,如下所示:

SELECT
    date_trunc('month', measured_at) AS month,
    MAX(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) - MIN(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) as consumption
    FROM readings
    WHERE device_id = 4
    GROUP BY 1
    ORDER BY 1 DESC LIMIT 12;

...和:

SELECT
    date_trunc('year', measured_at) AS year,
    MAX(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) - MIN(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) as consumption
    FROM readings
    WHERE device_id = 4
    GROUP BY 1
    ORDER BY 1 DESC LIMIT ...;

如果您只选择某个时间间隔(例如过去 12 个月),请始终添加一个条件以减少要扫描的分区数量,例如:

SELECT
    date_trunc('month', measured_at) AS month,
    MAX(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) - MIN(CAST(data->>'1_8_0' AS DOUBLE PRECISION)) as consumption
    FROM readings
    WHERE device_id = 4
        AND measured_at >= CURRENT_TIMESTAMP - '13 months'::interval
    GROUP BY 1
    ORDER BY 1 DESC LIMIT 12;

【讨论】:

    【解决方案2】:

    目前time_bucket 不支持月/年:参见#414

    time_bucket 设计用于定期间隔,如天、小时、 分钟。由于月和年是可变时间单位,因此函数 不支持他们

    postgres date_trunc 也支持月/年

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2016-04-11
      • 2015-01-21
      • 1970-01-01
      相关资源
      最近更新 更多