首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle中对行进行求和?

如何在Oracle中对行进行求和?
EN

Stack Overflow用户
提问于 2020-08-06 01:25:23
回答 1查看 53关注 0票数 1

我有一个问题,更像是一种找到如何解决问题的想法的方法。

所以问题是:

每隔2分钟,我就会在我的桌子上收到一行包含各种信息的新行。它们是:

代码语言:javascript
复制
ID_VEIC - Vehicle ID
DT_POSI - Position date
LAT - latitude
LONGI - longitude
SPEED - car speed when positioning
GMT - Vehicle gmt.

其中有几个位置的速度为零,在我的情况下,表示车辆已停止。如果有几个停止的车辆位置(速度= 0),我必须在两个移动位置之间只选择停止的最后一个位置。

用图片解释:

在图像中,选择了速度为0的两条线。我需要以某种方式只显示该周期的最后一行,在第11行的情况下,仍然显示速度> 0的所有其他行。

这里有更多的细节:

当前结果集:

代码语言:javascript
复制
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    

所需的结果集

代码语言:javascript
复制
 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:

代码语言:javascript
复制
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; 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-06 01:28:07

您可以使用窗口函数筛选出speed0且"next“行的speed也为0的行:

代码语言:javascript
复制
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子句,您可以轻松地修改查询以根据给定的日期范围和/或车辆进行过滤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63270446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档