记录之间的平均时间

时间:2017-12-20 17:37:38

标签: sql postgresql psql

我有一张汽车ID表 - id及其电池电量 - battery,每隔10分钟收集一次。

我的目标是以下输出:电池从100下降到0所需的平均时间。我的目标是获取所有车载ID的全局平均值,即{{1}之间的平均时差所有唯一ID都有{}}和battery = 100。一个小警告是0 必须在 100之后,换句话说,我想排除充电时间(当100之后会出现0)。

如何在battery = 0中编写此类查询?

以下是一辆车的数据样本:

psql

1 个答案:

答案 0 :(得分:1)

所以,你只想要在下一个100之前得到0的100。

select avg(extract(epoch from (next_time - time) ) as avg_recharge_time
from (select t.*,
             lead(battery) over (partition by id order by time) as next_battery,
             lead(time) over (partition by id order by time) as next_time
      from t
      where battery in (0, 100)
     ) t
where battery = 100 and next_battery = 0;

这回答了你提出的问题。然而。我可以想象你的情况更复杂。例如,如果电池可以部分充电,那么这将产生不正确的结果。如果您遇到类似情况,请询问其他问题,并提供合适的样本数据和解释。