我有一个问题,更像是一种找到如何解决问题的想法的方法。
所以问题是:
每隔2分钟,我就会在我的桌子上收到一行包含各种信息的新行。它们是:
ID_VEIC - Vehicle ID
DT_POSI - Position date
LAT - latitude
LONGI - longitude
SPEED - car speed when positioning
GMT - Vehicle gmt.其中有几个位置的速度为零,在我的情况下,表示车辆已停止。如果有几个停止的车辆位置(速度= 0),我必须在两个移动位置之间只选择停止的最后一个位置。
用图片解释:

在图像中,选择了速度为0的两条线。我需要以某种方式只显示该周期的最后一行,在第11行的情况下,仍然显示速度> 0的所有其他行。
这里有更多的细节:
当前结果集:
ROWNUM ID_VEIC DAT_POSI LAT LONGI SPEED
1 1211678 06/08/2020 06:08 -254.454.135 -544.047.225 15
2 1211678 06/08/2020 06:38 -25.445.364 -544.047.383 20
3 1211678 06/08/2020 07:08 -25.445.401 -54.404.762 0
4 1211678 06/08/2020 07:38 -254.454.135 -544.046.878 0
5 1211678 06/08/2020 08:08 -254.454.255 -544.046.828 10
6 1211678 06/08/2020 08:38 -254.453.996 -54.404.707 25
7 1211678 06/08/2020 09:08 -25.445.428 -544.047.445 45
8 1211678 06/08/2020 09:38 -254.454.583 -544.048.415 0 所需的结果集
ROWNUM ID_VEIC DAT_POSI LAT LONGI SPEED
1 1211678 06/08/2020 06:08 -254.454.135 -544.047.225 15
2 1211678 06/08/2020 06:38 -25.445.364 -544.047.383 20
3 1211678 06/08/2020 07:38 -254.454.135 -544.046.878 0
4 1211678 06/08/2020 08:08 -254.454.255 -544.046.828 10
5 1211678 06/08/2020 08:38 -254.453.996 -54.404.707 25
6 1211678 06/08/2020 09:08 -25.445.428 -544.047.445 45
7 1211678 06/08/2020 09:38 -254.454.583 -544.048.415 0 第3行已被删除,仅显示先前为第4行的行。
你知道怎么做吗?
在select used:
SELECT ID_VEIC,
DAT_POSI,
LAT,
LONGI,
SPEED,
GMT
FROM LITERAL_VIEW
WHERE ID_VEIC= 1211678
AND DAT_POSI BETWEEN SYSDATE - INTERVAL '2' HOUR AND SYSDATE
AND ROWNUM <= 999
ORDER BY ID_VEIC,
DAT_POSI; 发布于 2020-08-06 01:28:07
您可以使用窗口函数筛选出speed为0且"next“行的speed也为0的行:
select id_veic, dat_posi, lat, longi, speed, gmt
from (
select l.*, lead(speed) over(partition by id_veic order by date_posi) lead_speed
from literal_view l
) t
where not (speed = 0 and lead_speed = 0)通过向子查询添加where子句,您可以轻松地修改查询以根据给定的日期范围和/或车辆进行过滤。
https://stackoverflow.com/questions/63270446
复制相似问题