[英]Hive SQL query by status change
vehicle![]() |
record_time![]() |
charging_state![]() |
---|---|---|
TEST0000000000001![]() |
2022-12-28 14:55:54.0 ![]() |
3 ![]() |
TEST0000000000001![]() |
2022-12-28 15:00:00.0 ![]() |
3 ![]() |
TEST0000000000001![]() |
2022-12-28 15:16:10.0 ![]() |
3 ![]() |
12100000000000002 ![]() |
2022-12-28 15:37:11.0 ![]() |
0 ![]() |
12100000000000002 ![]() |
2022-12-28 15:40:34.0 ![]() |
0 ![]() |
12100000000000002 ![]() |
2022-12-28 15:41:50.0 ![]() |
3 ![]() |
TEST0000000000001![]() |
2022-12-28 15:45:30.0 ![]() |
3 ![]() |
TEST0000000000001![]() |
2022-12-28 15:51:46.0 ![]() |
3 ![]() |
TEST0000000000002![]() |
2022-12-28 15:57:16.0 ![]() |
2 ![]() |
TEST0000000000002![]() |
2022-12-28 15:57:39.0 ![]() |
0 ![]() |
TEST0000000000001![]() |
2022-12-28 15:57:47.0 ![]() |
0 ![]() |
TEST0000000000002![]() |
2022-12-28 16:02:41.0 ![]() |
3 ![]() |
TEST0000000000001![]() |
2022-12-28 16:02:48.0 ![]() |
3 ![]() |
TEST0000000000002![]() |
2022-12-28 16:08:03.0 ![]() |
3 ![]() |
12100000000000002 ![]() |
2022-12-28 16:17:34.0 ![]() |
0 ![]() |
TEST0000000000002![]() |
2022-12-28 16:24:18.0 ![]() |
2 ![]() |
TEST0000000000002![]() |
2022-12-28 16:27:43.0 ![]() |
2 ![]() |
12100000000000002 ![]() |
2022-12-28 16:29:22.0 ![]() |
0 ![]() |
12100000000000002 ![]() |
2022-12-28 16:32:44.0 ![]() |
0 ![]() |
TEST0000000000001![]() |
2022-12-28 16:34:17.0 ![]() |
3 ![]() |
TEST0000000000001![]() |
2022-12-28 16:34:36.0 ![]() |
3 ![]() |
TEST0000000000002![]() |
2022-12-28 16:35:02.0 ![]() |
0 ![]() |
TEST0000000000002![]() |
2022-12-28 16:35:08.0 ![]() |
2 ![]() |
TEST0000000000001![]() |
2022-12-28 16:41:28.0 ![]() |
3 ![]() |
TEST0000000000002![]() |
2022-12-28 16:42:34.0 ![]() |
2 ![]() |
TEST0000000000002![]() |
2022-12-28 16:46:00.0 ![]() |
2 ![]() |
TEST0000000000001![]() |
2022-12-28 16:46:23.0 ![]() |
3 ![]() |
TEST0000000000002![]() |
2022-12-28 16:46:31.0 ![]() |
2 ![]() |
TEST0000000000001![]() |
2022-12-28 16:46:48.0 ![]() |
0 ![]() |
TEST0000000000002![]() |
2022-12-28 17:14:27.0 ![]() |
0 ![]() |
TEST0000000000001![]() |
2022-12-28 17:14:41.0 ![]() |
0 ![]() |
TEST0000000000002![]() |
2022-12-28 17:18:58.0 ![]() |
2 ![]() |
charging_state == 0
means charging charging_state == 0
表示正在充电
I want to find out the count of all charge ends.我想找出所有充电结束的次数。
For each vehicle the previous data charging_state == 0
and the next data charging_state != 0
.对于每辆车,前一个数据
charging_state == 0
和下一个数据charging_state != 0
。
The result of the sample data should be样本数据的结果应该是
vehicle![]() |
count![]() |
---|---|
TEST0000000000001![]() |
1 ![]() |
12100000000000002 ![]() |
1 ![]() |
TEST0000000000002![]() |
3 ![]() |
Assuming this is hive, you can use lead()
to get next charging status and then compare them to calculate change of status.假设这是 hive,您可以使用
lead()
获取下一个充电状态,然后比较它们以计算状态变化。
select vehicle,
sum( case when charging_state=0 and nvl(next_charging_state,0)<>0 then 1 else 0 end) as cnt
from (
select vehicle, charging_state, lead(charging_state) over (partition by vehicle order by vehicle,record_time ) as next_charging_state from mytable) rs
group by 1
Inner query will calculate a row and next row's status and Outer query will compare them and get a count of status change from 0 to anything else.内部查询将计算一行和下一行的状态,外部查询将比较它们并获得从 0 到其他任何状态变化的计数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.