如何计算 QuestDB 中布尔记录发生的时间?

How can I calculate how long ago a boolean record occurred in QuestDB?

我有一个 table iot 有一些传感器数据,其中一列是布尔值作为某些事件发生的指标,我如何计算最近的 true 值发生在使用 SQL?

的列中

示例数据集如下所示:

ts sensor
2021-04-07T17:12:36.314688Z true
2021-04-07T17:12:43.995006Z false
2021-04-07T17:12:47.447316Z false
2021-04-07T17:12:53.276256Z true
2021-04-07T17:12:58.723072Z false

如果您想在 SQL 中执行此操作,可以使用 datediff() 来计算您的时间戳与现在之间的时间差。

此查询 return 两列:

  • 记录的时间戳
  • 从时间戳到现在的持续时间(以秒为单位)
select datediff('s', now(), iot.ts) diff, ts 
from iot

示例响应:

diff ts
56241 2021-04-07T17:12:36.314688Z
56233 2021-04-07T17:12:43.995006Z
56230 2021-04-07T17:12:47.447316Z
56224 2021-04-07T17:12:53.276256Z
56219 2021-04-07T17:12:58.723072Z

如果你想获得一个值的最新读数,你可以使用:

select datediff('s', now(), iot.ts) diff, ts 
from iot
latest by sensor where sensor

这将首先对 return 行执行 where 过滤,其中 sensor=true 然后对剩余的行执行 return 最新记录:

diff ts
56224 2021-04-07T17:12:53.276256Z

datediff的单位可以是秒、分、时、日、月或年。有关详细信息,请参阅 documentation for datediff