2017-07-28 56 views
0

Query result screenshot需要更新15分钟,每一个最后的列值

select ROUTE_DESC, 
     TRANSIT_TIME, 
     to_timestamp(TIME_DEPART) + 
        numtodsinterval(TRANSIT_TIME,'HOUR') as "arrival", 
     (to_timestamp(TIME_DEPART) 
        +numtodsinterval(nvl(TRANSIT_TIME,0),'HOUR')) 
          + interval '15' MINUTE as "dept" 
    from FE_JPROUTE_SHIP_TMP 
where TRIP_NO='TRP0000464' 
    and GUID='-1259520161' order by SEQ_NO; 

我想这样

route_desc transit_time arraival       dept 
----------------------------------------------------------------- 
null  null   25-JUL-17 06.15.00.000000000 AM 
null  1    25-JUL-17 07.15.00.000000000 AM 25-JUL-17 07.30.00.000000000 AM 
null  3    25-JUL-17 10.30.00.000000000 AM 25-JUL-17 10.45.00.000000000 AM 

Desired result screenshot

+0

究竟是什么阻止你这样做(不管它是什么)?提出一些关于你问题的更详细的解释,以及你到目前为止所尝试的。 – g00dy

+0

实际TIME_DEPART是“25-JUL-17 06.00.00.000000000 AM”我想将TIME_DEPART值添加到每一行的TIME_DEPART。所以它可能是25-JUL-17 06.15.00.000000000 AM 25-JUL-17 07.30.00.000000000 AM 25-JUL-17 10.45.00.000000000 AM但实际上我得到的是25-JUL-17 06.00.00.000000000 AM 25-JUL-17 07.15.00.000000000 AM 25-JUL-17 09.15.00.000000000 AM因此,我需要将TRANSIT_TIME添加到部门的最大值。 –

回答

0

您需要使用累积产值SUM() - ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW - 这是默认在oracle中为SUM() OVER (ORDER BY) 以及NULLS FIRST子句。

这里是对查询的模拟。

WITH FE_JPROUTE_SHIP_TMP AS 
    (SELECT NULL ROUTE_DESC, 
    NULL transit_time, 
    '25-JUL-17 06.00.00.000000000 AM' TIME_DEPART 
    FROM DUAL 
    UNION ALL 
    SELECT NULL ROUTE_DESC, 
    1 transit_time, 
    '25-JUL-17 06.00.00.000000000 AM' TIME_DEPART 
    FROM DUAL 
    UNION ALL 
    SELECT NULL ROUTE_DESC, 
    3 transit_time, 
    '25-JUL-17 06.00.00.000000000 AM' TIME_DEPART 
    FROM DUAL 
) 
SELECT transit_time, 
    arrival, 
    NVL2(arrival,arrival + interval '15' MINUTE ,to_timestamp(TIME_DEPART) + interval '15' MINUTE) AS "dept" 
FROM 
    (SELECT transit_time, 
    time_depart, 
    to_timestamp(TIME_DEPART) + numtodsinterval(CUMU_TRANSIT_TIME,'HOUR') + numtodsinterval(15*CUMU_DEP_INTV,'MINUTE') arrival 
    FROM 
    (SELECT transit_time, 
     time_depart, 
     SUM (TRANSIT_TIME) OVER (ORDER BY transit_time NULLS FIRST) CUMU_TRANSIT_TIME, 
     SUM (NVL2(TRANSIT_TIME,1,NULL)) OVER (ORDER BY transit_time NULLS FIRST) CUMU_DEP_INTV 
    FROM FE_JPROUTE_SHIP_TMP 
    ) 
); 

您将不得不将它合并到主查询中。 让我知道您的反馈。

+0

非常感谢你Kaushik.Its工作很好。我的“dept”列的最后一个值应该为null。 –

+0

好的。不用谢。我检查了你想要的o/p图片。其实在图像和你的问题的产出略有不同, –

+0

雅kaushik这是一个新的要求。我解决了一些其他way.Thank你Kaushik。 –

相关问题