我的传感器每隔约20秒发射一次数据。然而,有时这些都有问题,并且几分钟或几小时内不会发出数据。
我想获取这些断开连接并知道它们持续多长时间。
所以我尝试使用函数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;
来计算5分钟的数据(例如),但此函数仅影响数据本身。因此,不可能获取桶HAVING COUNT(*)= 0。
我试过了:
{{1}}
但从逻辑上讲,它什么都不返回。
一点点帮助会很明白:)
答案 0 :(得分:2)
您可能对间隙填充感兴趣,后者在TimescaleDB文档中进行了描述:http://docs.timescale.com/using-timescaledb/reading-data#gap-filling
答案 1 :(得分:1)
这里找到的解决方案归功于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。