2017-07-28 102 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。 –