【发布时间】:2020-08-05 17:25:22
【问题描述】:
我有一个问题更像是寻找解决问题的方法。
那么问题来了:
每 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 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;
【问题讨论】:
-
请编辑您的问题以将您的原始数据和预期结果显示为格式化文本(而非图像)。听起来像一个差距和岛屿问题,但不确定。为什么在速度为零时纬度/经度会发生变化,这有关系吗?此外,通过
rownumbefore 排序过滤会返回一组不确定的行。 -
同意。当您在查询中打开
order by时,请非常小心地使用rownum。 -
尽管速度为零,但纬度/经度正在变化,因为我每 2 分钟收到一次车辆定位。在那段时间里,汽车可能移动了一点,然后又停下来,在那个间隔内,将零速设置在不同的位置。感谢提供 rownum 信息以及格式。
标签: sql oracle window-functions gaps-and-islands