쿼리 질문입니다. 0 4 801

by 라슈 [SQL Query] [2014.11.17 14:48:45]


시간 개수
08 3
11 7
13 10
15 13
17 18
23 27

위와 같은 데이터가 있을때, 쿼리로 아래와 같이 비어있는 시간대에 바로 전 데이터를 추가 해서 추출 할 수 있을까요??

고수님들의 답변 기달립니다.

잘 부탁합니다.

시간 개수
08 3
09 3
10 3
11 7
12 7
13 10
14 10
15 13
16 13
17 18
18 18
19 18
20 18
21 18
22 18
23 27

 

by 마농 [2014.11.17 14:55:49]

'08' ~ '23' 은 고정으로 정해진건가요?
아니면 테이블 데이터의 MIN, MAX 에서 가변적으로 따오는 건가요?


by 라슈 [2014.11.17 15:01:40]

08에서 23은 고정 입니다.


by DarkBee [2014.11.17 15:08:57]
WITH t ( 시간, 개수 ) AS
(
    SELECT '08', 3  FROM DUAL UNION ALL
    SELECT '11', 7  FROM DUAL UNION ALL
    SELECT '13', 10 FROM DUAL UNION ALL
    SELECT '15', 13 FROM DUAL UNION ALL
    SELECT '17', 18 FROM DUAL UNION ALL
    SELECT '23', 27 FROM DUAL
)
SELECT a.시간
     , LAST_VALUE ( 개수 IGNORE NULLS ) OVER ( ORDER BY a.시간 ) 개수
  FROM t
     , ( SELECT LPAD ( TO_CHAR ( TO_NUMBER ( 시간 ) + level - 1 ), 2, '0' ) 시간
           FROM (
                  SELECT MAX ( 시간 ) - MIN ( 시간 ) + 1 lv
                       , MIN ( 시간 )                    시간 
                    FROM t 
         ) CONNECT BY LEVEL <= lv
     ) a
 WHERE a.시간 = t.시간 (+)

 


by DarkBee [2014.11.17 15:12:17]
SELECT a.시간
     , LAST_VALUE ( 개수 IGNORE NULLS ) OVER ( ORDER BY a.시간 ) 개수
  FROM t
     , ( SELECT LPAD ( TO_CHAR ( TO_NUMBER ( '08' ) + LEVEL - 1 ), 2, '0' ) 시간 
           FROM DUAL 
        CONNECT BY LEVEL <= 16 -- 23 - 08
     ) a
 WHERE a.시간 = t.시간 (+)

 

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