시간설정 기준값을 가지고 분단위로 가로로 펼쳐서 해당 분에 1을 찍으려 합니다. 1 4 526

by 메로나 [SQL Query] [2021.03.24 10:24:30]


시간설정 기준값 컬럼은 2개가 있구요 분과 시를 표시합니다.
예를들어 A, B, C 3개의 스케줄이 있다면

   C_MIN   C_HOUR
A  01,03,58    09                     : 09시 01분, 03분, 58분에 가동하라
B  02           *                     : 매시간(*) 02분마다 가동하라
C  03          00,01,16,23            : 00시 01시 16시 23시의 03분에 가동하라

이런의미가 됩니다.

그런데 해당 시간, 분의 항목에 1을 표시해서 뿌려보고 싶습니다.


        00시              01시 .....    ....       09시                ......         23시
   00 01 02 03 ... 59   00 01 02 03 ... 59   00 01 02 03 .... 58 59   ...     00 01 02 03 ... 59    
A                                                      1      1      1       ...
B         1                       1                       1                ...               1 
C              1                      1                                                         1

 

CONNECT BY ?! 써야 되는건지 어떻게 해야 되는건지...전혀 감이 안오네요 ㅠㅠ

by 마농 [2021.03.24 11:19:31]

컬럼이 너무 많지 않나요? 24*60=1440
꼭 한줄에 다 나와야 하나요?
시간을 아래로 내려서 24줄에 60개 항목만 하던가 하는 방식으로 결과 포멧을 바꾸는 건 어떤지?
 


by 메로나 [2021.03.24 11:31:57]

컬럼이 아닌 행으로 되어도 

가로든 세로든 상관 없습니다. 

시간대의 분별로만 표시 가능하면 됩니다


by 마농 [2021.03.24 11:47:53]
WITH t AS
(
SELECT 'A' id, '01,03,58' c_min, '09' c_hour FROM dual
UNION ALL SELECT 'B', '02', '*'           FROM dual
UNION ALL SELECT 'C', '03', '00,01,16,23' FROM dual
)
SELECT *
  FROM (SELECT id
             , hh
             , TO_NUMBER(mi) mi
          FROM (SELECT LPAD(LEVEL - 1, 2, '0') hh FROM dual CONNECT BY LEVEL <= 24) a
             , (SELECT LPAD(LEVEL - 1, 2, '0') mi FROM dual CONNECT BY LEVEL <= 60) b
             , t c
         WHERE (INSTR(c_hour, hh) > 0 OR c_hour = '*')
           AND (INSTR(c_min , mi) > 0 OR c_min  = '*')
        )
 PIVOT (COUNT(*) FOR mi IN ( 00, 01, 02, 03, 04, 05, 06, 07, 08, 09
                           , 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
                           , 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
                           , 30, 31, 32, 33, 34, 35, 36, 37, 38, 39
                           , 40, 41, 42, 43, 44, 45, 46, 47, 48, 49
                           , 50, 51, 52, 53, 54, 55, 56, 57, 58, 59
                           ) )
 ORDER BY id, hh
;

 


by 메로나 [2021.03.24 11:51:41]

(-___-);;;;;

마농님... 제 질문을 보시고... 이게... 머리에 확 떠오르시나요??

진심 ㅠㅠ 존경스럽습니다 

(^_^)b

저 쿼리 저도 분석하며 공부해보겠습니다. 오늘 신의경지를 본거 같은 느낌이 드네요...

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