두 컬럼 시간 사이의 카운트(글수정) 0 5 4,157

by 미등록 [SQL Query] [2024.06.24 18:07:09]


123.PNG (17,202Bytes)

안녕하세요 

두 컬럼의 시간사이 데이터들의 카운트를 구하려하는데요

테이블 a_table / b_table

컬럼1 sta_time

컬럼2 end_time

데이터타입은 varchar2 입니다

예를들어 시작시간 00시 00분

종료시간은 00시01분01초 , 00시02분01초, 00시03분01초

이런식으로 로우데이터가있습니다

00시00분부터 00시10분사이에 1분단위로 종료되지 않은 데이터를 카운트하고싶은데 

ex) 00시00분 3건

00시01분 3건

00시02분 2건

이런식으로 카운트를 해야하는데 어찌해야할지 감이 잡히질않습니다 도움좀 부탁드리겠습니다

사진은 편의를 위해 00초 시작은 sta_time은 갯수에 포함 / end_time은 종료된 것으로 보았습니다

by 마농 [2024.06.25 00:01:28]

원본 대비 결과표 예시자료를 보여주세요.


by 미등록 [2024.06.25 14:14:44]

예시자료 올렸습니다!


by 마농 [2024.06.25 15:19:27]
WITH a_table AS
(
SELECT 'a' user_id, '20240624000000' sta_time FROM dual
UNION ALL SELECT 'b', '20240624000200' FROM dual
UNION ALL SELECT 'c', '20240624000300' FROM dual
UNION ALL SELECT 'd', '20240624000300' FROM dual
UNION ALL SELECT 'e', '20240624000400' FROM dual
UNION ALL SELECT 'f', '20240624000400' FROM dual
UNION ALL SELECT 'g', '20240624000400' FROM dual
UNION ALL SELECT 'h', '20240624000600' FROM dual
UNION ALL SELECT 'i', '20240624000800' FROM dual
UNION ALL SELECT 'j', '20240624000800' FROM dual
)
, b_table AS
(
SELECT 'a' user_id, '20240624000300' end_time FROM dual
UNION ALL SELECT 'b', '20240624000300' FROM dual
UNION ALL SELECT 'c', '20240624000500' FROM dual
UNION ALL SELECT 'd', '20240624000800' FROM dual
UNION ALL SELECT 'e', '20240624000800' FROM dual
UNION ALL SELECT 'f', '20240624000800' FROM dual
UNION ALL SELECT 'g', '20240624000900' FROM dual
UNION ALL SELECT 'h', '20240624001100' FROM dual
UNION ALL SELECT 'i', '20240624001300' FROM dual
UNION ALL SELECT 'j', '20240624001300' FROM dual
)
, search_condition AS
(
SELECT TO_CHAR(stm + (LEVEL - 1) /24/60, 'yyyymmddhh24miss') stm
     , TO_CHAR(stm + (LEVEL - 0) /24/60, 'yyyymmddhh24miss') etm
  FROM (SELECT TO_DATE('20240624000000', 'yyyymmddhh24miss') stm
             , TO_DATE('20240624001000', 'yyyymmddhh24miss') etm
          FROM dual
        )
 CONNECT BY LEVEL <= ROUND((etm - stm) * 24 * 60)
)
SELECT c.stm
     , COUNT(a.user_id) cnt
  FROM search_condition c
  LEFT OUTER JOIN b_table b
    ON b.end_time > c.stm
  LEFT OUTER JOIN a_table a
    ON a.sta_time < c.etm
   AND a.user_id  = b.user_id
 GROUP BY c.stm
 ORDER BY c.stm
;

 


by 미등록 [2024.06.25 16:23:55]

너무 감사드립니다ㅜㅜ 제가 본문에 예시로 써놓은게 사실 저만큼이 아니고 몇천건 됩니다..ㅜㅜ 혹시 이렇게도 가능할까요


by 마농 [2024.06.25 16:30:15]

유니온으로 데이터를 일일이 다 치라는 의미의 답변이 아닙니다.
WITH 구문은 쿼리를 실제로 돌려보기 위한 테스트 용도일 뿐입니다.
WITH 문 대신 실 테이블에 쿼리 적용하시면 됩니다.

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