database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39740 게시물 읽기
No. 39740
두 날짜 사이의 주말을 제외한 일수구하기
작성자
노정균(notul2000)
작성일
2012-11-15 13:52ⓒ
2012-11-15 15:33ⓜ
조회수
9,506

안녕하세요.

두 날짜 사이의 주말을 제외한 일수를 구하려고 합니다.

엑셀의 NETWORKDAYS 의 함수처럼요..

 SELECT    APP_ID
                    ,COUNT(*) CNT
  FROM (
         SELECT APP_ID
                        ,TO_DATE(LAST_CHG_DATE) + LEVEL - 1 DT
                        ,TO_CHAR(LAST_CHG_DATE + LEVEL - 1, 'D') DNM
          FROM TB_SL_APP_BAS
          CONNECT BY LEVEL <= SYSDATE - TO_DATE(LAST_CHG_DATE) + 1
        ) A
 WHERE DNM NOT IN ('1', '7')
 GROUP BY APP_ID

간단하게 일단 이렇게 짜기는 했는데,

         SELECT APP_ID
                        ,TO_DATE(LAST_CHG_DATE) + LEVEL - 1 DT
                        ,TO_CHAR(LAST_CHG_DATE + LEVEL - 1, 'D') DNM
          FROM TB_SL_APP_BAS
          CONNECT BY LEVEL <= SYSDATE - TO_DATE(LAST_CHG_DATE) + 1

이부분만 돌리면 데이터가 15만건 이상이 나오네요.. ㅠ.ㅠ 속도도 느리구요.

 

그런데 전체쿼리를 돌리면  오류메시지는 안뜨는데 데이터가 안나오네요.

무한루프에 빠진듯한 느낌이 드는데..

어떻게 해야 빠르면서, 제대로 일수를 뿌릴 수 있을까요? 

부탁드리겠습니다.

 

이 글에 대한 댓글이 총 2건 있습니다.

로직은
일수 - 1주당2일 - 시작요일별 나머지일수별 토/일수

SELECT DY_CNT - TRUNC(DY_CNT/7)*2 -
       CASE STR_D||MOD(DY_CNT,7)  WHEN '11' THEN 1
                                  WHEN '12' THEN 1
                                  WHEN '13' THEN 1
                                  WHEN '14' THEN 1
                                  WHEN '15' THEN 1
                                  WHEN '16' THEN 1
                                  WHEN '26' THEN 1
                                  WHEN '35' THEN 1
                                  WHEN '36' THEN 2
                                  WHEN '44' THEN 1
                                  WHEN '45' THEN 2
                                  WHEN '46' THEN 2
                                  WHEN '53' THEN 1
                                  WHEN '54' THEN 2
                                  WHEN '55' THEN 2
                                  WHEN '56' THEN 2
                                  WHEN '62' THEN 1
                                  WHEN '63' THEN 2
                                  WHEN '64' THEN 2
                                  WHEN '65' THEN 2
                                  WHEN '66' THEN 2
                                  WHEN '71' THEN 1
                                  WHEN '72' THEN 2
                                  WHEN '73' THEN 2
                                  WHEN '74' THEN 2
                                  WHEN '75' THEN 2
                                  WHEN '76' THEN 2
                                  ELSE 0
       END workday
FROM  (
      SELECT  TO_CHAR(TO_DATE(:STR_DT, 'YYYYMMDD'), 'D') STR_D
             ,TO_DATE(:END_DT, 'YYYYMMDD') -  TO_DATE(:STR_DT, 'YYYYMMDD')+1 DY_CNT
      FROM   DUAL
      )

dol님이 2012-11-16 11:14에 작성한 댓글입니다. Edit

Connect By Level < n 를 이용한 행 복제 방법은
Dual 과 같이 1 Row 데이터에만 적용하는 방법입니다.
여러행의 자료에 적용하면 예상건수보다 훨씬 더 많이 나오게 되며
건수가 많을 수록 응답이 안나올 수 있습니다.
아래 사이트 참고하시면 될듯 합니다.
http://www.oracleclub.com/article/51663

마농(manon94)님이 2012-11-19 09:18에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39747아마 불가능하겠지만..혹시나해서 문의 드립니다. [2]
새하정
2012-11-19
6059
39746오라클(Oracle)을대용할수있는,오픈소스의갑(甲)PostgreSQL!!!
포스트그레스SQL
2012-11-16
6321
39741고정 가로세로 변환 하여 TABLE에 넣기 [4]
고정변
2012-11-16
6947
39740두 날짜 사이의 주말을 제외한 일수구하기 [2]
노정균
2012-11-15
9506
39739중복행 재거 [1]
약쟁이총각
2012-11-13
5981
39738중복 행 체크 관련 질문 드립니다. [1]
pjin
2012-11-12
5626
39737order by를 in절로 가능 할까요? [2]
사과
2012-11-11
5219
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다