시작과 종료 행에 대해서 날짜별 차이값을 가져오게 도와주세요 0 3 545

by 권오창 [2019.08.28 21:06:42]


ITEM    PROCESS  TYPE      TIME                       SITE   QTY1   QTY2
item1    A100      START    20190517054347812375  P1     25     53900
item1    A840      END      20190520152934435414  P1     25     53838
item1    B100      START    20190522145923690148  P2     25     53838
item1    B700      END      20190603003540682511  P2     25     51785
item1    D100      START    20190819120529218469  P4     12     24973
item1    D450      END      20190820150630346346  P4     12     24973


작업이 SITE별로 시작과 종료가 이루어집니다.QTY1과 QTY2의 수량은 END 기준으로 가져와야 되구요
걸린 시간은 END - START를 해야 됩니다

ITEM    TIME                                                        SITE   QTY1   QTY2
item1    (20190520152934435414 - 20190517054347812375)  P1     25     53838
item1    (20190603003540682511 - 20190522145923690148)  P2     25     51785
item1    (20190820150630346346 - 20190819120529218469)  P4     12     24973

 

제가 실력 부족인 것도 있지만 오늘따라 왜이래 머리가 안돌아 가는지 모르겠습니다 ㅠㅠ

by 춘 [2019.08.29 06:27:04]

더 좋은 방법이 있을겁니다...

 

WITH t AS
(
    SELECT 'ITEM1' ITEM, 'A100' PROCESS, 'START' TYPE, '20190517054347812375' TIME, 'P1' SITE, 25 QTY1, 53900 QTY2 FROM DUAL
    UNION ALL
    SELECT 'ITEM1', 'A840', 'END', '20190520152934435414', 'P1', 25, 53838 FROM DUAL
    UNION ALL
    SELECT 'ITEM1', 'B100', 'START', '20190522145923690148', 'P2', 25, 53838 FROM DUAL
    UNION ALL
    SELECT 'ITEM1', 'B700', 'END', '20190603003540682511', 'P2', 25, 51785 FROM DUAL
    UNION ALL
    SELECT 'ITEM1', 'D100', 'START', '20190819120529218469', 'P4', 12, 24973 FROM DUAL
    UNION ALL
    SELECT 'ITEM1', 'D450', 'END', '20190820150630346346', 'P4', 12, 24973 FROM DUAL
)
SELECT
    A.ITEM
    , (A.TIME - B.TIME) TIME
    , A.SITE
    , A.QTY1
    , A.QTY2
FROM
    (
    SELECT
        ITEM
        , TIME
        , SITE
        , QTY1
        , QTY2
    FROM T
    WHERE TYPE = 'END'
    ) A JOIN (
    SELECT
        ITEM
        , TIME
        , SITE
        , QTY1
        , QTY2
    FROM T
    WHERE TYPE = 'START'
    ) B
    ON A.SITE = B.SITE
;


by 소주쵝오 [2019.08.29 09:03:20]
with t as
(select 'ITEM1' item, 'A100' process, 'START' type, '20190517054347812375' time, 'P1' site, 25 qty1, 53900 qty2 from dual union all
 select 'ITEM1', 'A840', 'END', '20190520152934435414', 'P1', 25, 53838 from dual union all
 select 'ITEM1', 'B100', 'START', '20190522145923690148', 'P2', 25, 53838 from dual union all
 select 'ITEM1', 'B700', 'END', '20190603003540682511', 'P2', 25, 51785 from dual union all
 select 'ITEM1', 'D100', 'START', '20190819120529218469', 'P4', 12, 24973 from dual union all
 select 'ITEM1', 'D450', 'END', '20190820150630346346', 'P4', 12, 24973 from dual
)
select item
     , edt
     , sdt
     , to_timestamp(edt, 'yyyymmddhh24missff6') 
       - to_timestamp(sdt, 'yyyymmddhh24missff6') as diff_dt
     , site
     , qty1
     , qty2
from (select item
           , min(decode(type, 'END', time)) as edt
           , min(decode(type, 'START', time)) as sdt
           , site
           , qty1
           , min(decode(type, 'END', qty2)) as qty2
      from t
      group by item, substr(process, 1, 1), site, qty1
     )
order by site
;

 


by 꼬랑지 [2019.08.29 15:22:42]
WITH T AS (
    SELECT 'item1' ITEM,    'A100' PROCESS,      'START' TYPE,   '20190517054347812375' TIME,  'P1' SITE,     25 QTY1,     53900 QTY2 FROM DUAL UNION ALL 
    SELECT 'item1' ITEM,    'A840' PROCESS,      'END' TYPE,   '20190520152934435414' TIME,  'P1' SITE,     25 QTY1,     53838 QTY2 FROM DUAL UNION ALL   
    SELECT 'item1' ITEM,    'B100' PROCESS,      'START' TYPE,   '20190522145923690148' TIME,  'P2' SITE,     25 QTY1,     53838 QTY2 FROM DUAL UNION ALL 
    SELECT 'item1' ITEM,    'B700' PROCESS,      'END' TYPE,   '20190603003540682511' TIME,  'P2' SITE,     25 QTY1,     51785 QTY2 FROM DUAL UNION ALL   
    SELECT 'item1' ITEM,    'D100' PROCESS,      'START' TYPE,   '20190819120529218469' TIME,  'P4' SITE,     12 QTY1,     24973 QTY2 FROM DUAL UNION ALL 
    SELECT 'item1' ITEM,    'D450' PROCESS,      'END' TYPE,   '20190820150630346346' TIME,  'P4' SITE,     12 QTY1,     24973 QTY2 FROM DUAL
)
SELECT 
    ITEM,SITE,STIME,ETIME,ETIME_QTY1,ETIME_QTY2
FROM (
    SELECT ITEM,TYPE,TIME,SITE,QTY1,QTY2 FROM T
)
PIVOT(
    MIN(QTY1) QTY1,MIN(QTY2) QTY2,MIN(TIME)
    FOR TYPE
    IN ('START' STIME,'END' ETIME)
)

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입