我有一张汽车ID表 - id
及其电池电量 - battery
,每隔10分钟收集一次。
我的目标是以下输出:电池从100下降到0所需的平均时间。我的目标是获取所有车载ID的全局平均值,即{{1}之间的平均时差所有唯一ID都有{}}和battery = 100
。一个小警告是0 必须在 100之后,换句话说,我想排除充电时间(当100之后会出现0)。
如何在battery = 0
中编写此类查询?
以下是一辆车的数据样本:
psql
答案 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;
这回答了你提出的问题。然而。我可以想象你的情况更复杂。例如,如果电池可以部分充电,那么这将产生不正确的结果。如果您遇到类似情况,请询问其他问题,并提供合适的样本数据和解释。