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 38990 게시물 읽기
No. 38990
단순(?)휴가일수 구하기...질문드려요
작성자
sql초보
작성일
2011-10-20 17:37
조회수
4,113

안녕하세요

간단한 휴가 일수를 구하려고 하는데 질문있습니다.

아래와 같은 데이터가 있는데요,

EMPNO STR_DT END_DT D_CNT
A 2011-02-02 2011-02-02 0.5
A 2011-03-13 2011-03-15 3
A 2011-04-05 2011-04-05 1
A 2011-04-29 2011-05-01 3
B 2011-01-06 2011-01-07 2
B 2011-05-05 2011-05-07 3
B 2011-09-29 2011-09-30 2
B 2011-10-01 2011-10-01 0.5

 

처음에는 단순히

 

SELECT SUM(D_CNT)

FROM A

WHERE STR_DT >= '2011-01-01'

AND END_DT <= '2011-04-30'

으로 조회 하면 될줄 알았더니

A사람의 경우, 4월29~5월01까지의 데이터가 추출이 안되서 SUM값이 제대로 나오지 않더라구요;;

저 조건으로 검색할경우 A사람의 4월29~4월30일사이에 2일간의 데이터를 SUM해야 되는데

어떻게 해야 조회가 정확히 될까요...

조언부탁드립니다.

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

WITH a AS
(
SELECT 'A' empno, '2011-02-02' str_dt, '2011-02-02' end_dt, 0.5 d_cnt FROM dual
UNION ALL SELECT 'A', '2011-03-13', '2011-03-15', 3   FROM dual
UNION ALL SELECT 'A', '2011-04-05', '2011-04-05', 1   FROM dual
UNION ALL SELECT 'A', '2011-04-29', '2011-05-01', 3   FROM dual
UNION ALL SELECT 'B', '2011-01-06', '2011-01-07', 2   FROM dual
UNION ALL SELECT 'B', '2011-05-05', '2011-05-07', 3   FROM dual
UNION ALL SELECT 'B', '2011-09-29', '2011-09-30', 2   FROM dual
UNION ALL SELECT 'B', '2011-10-01', '2011-10-01', 0.5 FROM dual
)
SELECT SUM(d_cnt
     - GREATEST(0, TO_DATE('2011-01-01', 'yyyy-mm-dd') - TO_DATE(str_dt, 'yyyy-mm-dd'))
     - GREATEST(0, TO_DATE(end_dt, 'yyyy-mm-dd') - TO_DATE('2011-04-30', 'yyyy-mm-dd'))
     ) sum_cnt
  FROM a
 WHERE str_dt <= '2011-04-30'
   AND end_dt >= '2011-01-01'
;

마농(manon94)님이 2011-10-21 10:27에 작성한 댓글입니다.

이제서야 댓글을 봤네요

단순해 보이는 문제를 심각하게 고민했는데

greatest함수로 간단하게 해결이 되었네요

좋은 답변 감사합니다~

 

sql초보님이 2011-10-24 18:16에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3899520분간격으로 합계를 구할려는데요... [1]
일자코딩
2011-10-21
4094
38994질문 --- 오라클 Select Trigger 가능할까요? [1]
글지기
2011-10-21
3408
38991열을 한 행으로.. [2]
차이
2011-10-21
4756
38990단순(?)휴가일수 구하기...질문드려요 [2]
sql초보
2011-10-20
4113
38988blob insert 후 delete 하는데 tablespace의 freespace가 계속 줄어듭니다. 이게 정상인가요? [2]
허종진
2011-10-20
5471
38986function 에서 into 문 결과 조건 처리 [2]
박재덕
2011-10-19
3966
389851997-07-16T19:20:30+01:00 형식으로 날짜를 넣고 싶습니다. [1]
조동건
2011-10-19
3619
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다