이건 제가 만든 쿼리입니다. 회사에 들어와 혼자 오라클 독학한지 4개월 밖에 안되서
쿼리를 짜는게 전문적이지 않고 많이 서투릅니다.
SELECT ROUTEID as 노선ID,
FC_BUSROUTE_ROUTENO(ROUTEID) 노선번호,
FC_BUS_CARREGNO(BUSID) AS 버스번호,
FC_BUSSTOP_SHORTID(NODEID) as 정류장ID,
FC_BUSSTOP_BSTOPNM(NODEID) AS 정류소명,
DECODE(fc_pathseq_dircd(routeid, pathseq), 0, '상행', 1, '하행') AS 상행하행,
DECODE(EVTSUBTPCD, 1,'교차로통과', 2, '도착', 3, '출발') AS 이벤트,
EVT_OCCURDT AS 이벤트시간,
RUNTM as 운행시간,
RUNDIST as 운행거리,
RUNSPD as 운행속도
--DECODE(TRUNC(RUNTM / 60),0,'',TRUNC(RUNTM/60)|| '분') ||
--LPAD((MOD(RUNTM,60)),2,'0')||'초' as 운행시간환산
--RUNTM - lag(RUNTM) over (order by RUNTM) as 시간차
FROM
(SELECT
ROUTEID,
BUSID,
NODEID,
EVTSUBTPCD,
EVT_OCCURDT,
PATHSEQ,
DECODE(EVTSUBTPCD, 2, EVT_OCCURDT, LAG(EVT_OCCURDT) OVER (ORDER BY EVT_OCCURDT)) AS 도착,
DECODE(EVTSUBTPCD, 3, EVT_OCCURDT) AS 출발,
DECODE(EVTSUBTPCD, 1, EVT_OCCURDT, LAG(EVT_OCCURDT) OVER (ORDER BY EVT_OCCURDT)) AS 교차로통과,
RUNSPD,
RUNDIST,
RUNTM
FROM TB_BMH_RUNEVTCOLL
WHERE ROUTEID = 165000002
AND EVTSUBTPCD IN (1,2,3)
AND EVT_OCCURDT > TO_DATE('2019042715000','YYYYMMDDHH24MISS')
AND EVT_OCCURDT < TO_DATE('2019042716000','YYYYMMDDHH24MISS')
and TB_BMH_RUNEVTCOLL.EVTTPCD = 21
--AND BUSID = 7016117
ORDER BY EVT_OCCURDT) A
order by 3,8,4
첫번째는 이쿼리의 결과값이고 두번째는 제가 원하는 결과값입니다.
이벤트시간과 운행시간에 대하여 첫번째값과 두번째값의 차이, 두번째값과 세번째값의 차이, 세번째값과 네번째값의 차이 이런식으로 쭉 계산이 되여 그 차이값이 옆에 표출이 되었으면 합니다. 제가 아는 선에서 lag도 써보고 이것저것 해봤는데 짧은 지식으로는 원하는 값이 나오지 않아 도움 요청드립니다.
아..차이값은 둘다 절대값으로 나왔으면 합니다.
SELECT routeid AS 노선id , fc_busroute_routeno(routeid) AS 노선번호 , fc_bus_carregno(busid) AS 버스번호 , fc_busstop_shortid(nodeid) AS 정류장id , fc_busstop_bstopnm(nodeid) AS 정류소명 , DECODE(fc_pathseq_dircd(routeid, pathseq), 0, '상행', 1, '하행') AS 상행하행 , DECODE(evtsubtpcd, 1, '교차로통과', 2, '도착', 3, '출발') AS 이벤트 , evt_occurdt AS 이벤트시간 , runtm AS 운행시간 , rundist AS 운행거리 , runspd AS 운행속도 , ROUND( ( evt_occurdt - LAG(evt_occurdt, 1, evt_occurdt) OVER(PARTITION BY routeid, busid ORDER BY evt_occurdt) ) * 24 * 60 * 60 ) AS 이벤트시간차 , ( runtm - LAG(runtm , 1, runtm ) OVER(PARTITION BY routeid, busid ORDER BY evt_occurdt) ) AS 이벤트시간차 FROM tb_bmh_runevtcoll WHERE routeid = 165000002 AND evtsubtpcd IN (1,2,3) AND evt_occurdt >= TO_DATE('2019042715', 'yyyymmddhh24') AND evt_occurdt < TO_DATE('2019042716', 'yyyymmddhh24') AND evttpcd = 21 -- AND busid = 7016117 ;