0

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

示例数据集如下所示:

ts 传感器
2021-04-07T17:12:36.314688Z 真的
2021-04-07T17:12:43.995006Z 错误的
2021-04-07T17:12:47.447316Z 错误的
2021-04-07T17:12:53.276256Z 真的
2021-04-07T17:12:58.723072Z 错误的
4

1 回答 1

1

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

此查询返回两列:

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

示例响应:

差异 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

这将where首先执行过滤以返回行,sensor=true然后在其余行上返回最新记录:

差异 ts
56224 2021-04-07T17:12:53.276256Z

对于 datediff 的单位,您可以使用秒、分钟、小时、天、月或年。有关详细信息,请参阅datediff 的文档

于 2021-04-08T08:54:32.143 回答