我有一个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 | 错误的 |
我有一个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 | 错误的 |
如果您想在 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 的文档