【问题标题】:Timescaledb time_bucket fetch periods with no rowTimescaledb time_bucket 获取没有行的时段
【发布时间】:2018-06-12 09:23:23
【问题描述】:

我有传感器每约 20 秒发射一次数据。然而,有时这些会出现问题,并且不会在几分钟或几小时内发出数据。

我想获取这些断开连接并知道它们持续多长时间。

所以我尝试使用函数time_bucket 来计算5 分钟的桶的数据数(例如),但这个函数只影响数据本身。因此无法获取 HAVING COUNT(*) = 0 的存储桶。

我试过这个:

SELECT time_bucket('5 minutes', datetime) AS bucket, COUNT(*) AS nb_datas
FROM measures
WHERE id_sensor = 123456
GROUP BY bucket
HAVING COUNT(*) = 0
ORDER BY bucket DESC;

但从逻辑上讲,它什么也不返回。

如果有一点帮助将不胜感激 :)

【问题讨论】:

    标签: sql postgresql timescaledb


    【解决方案1】:

    您可能对填补空白感兴趣,这在 TimescaleDB 文档中有所描述:http://docs.timescale.com/using-timescaledb/reading-data#gap-filling

    【讨论】:

      【解决方案2】:

      感谢 TimescaleDB github,我在这里找到了解决方案:

      SELECT period.date
      FROM (
          SELECT generate_series(date '2018-01-09 00:00:00', now(), interval '5 minutes') date
      ) as period
      WHERE period.date NOT IN (
          SELECT
              time_bucket('5 minutes', datetime) AS date
          FROM measures
          WHERE id_sensor = '123456'
              AND datetime >= '2018-01-09 00:00:00'
          GROUP BY date
          ORDER BY date
      )
      

      它使用 PostgreSQL 中的 generate_series 函数来填充存储桶,然后用数据减去存储桶以仅留下 HAVING COUNT(*) = 0。

      【讨论】:

        猜你喜欢
        • 2019-11-01
        • 2019-11-24
        • 2021-04-26
        • 2021-12-14
        • 2021-12-07
        • 2021-11-30
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        相关资源
        最近更新 更多