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 41224 게시물 읽기
No. 41224
이 쿼리 도움 부탁드립니다
작성자
매수신호
작성일
2016-08-26 16:23
조회수
7,525

 

 

테이블이름이 tbl 이고  다음과 같다고할때

업체명  이름   입사일    퇴사일

 A        차씨    04.12       04.24 

A        김씨     05.12       

A       이씨    06. 12    06.19

A        박씨   07.12

A        손씨   08.12      08.30

 

조회조건 월을 줘서 신규 업체만을  select 하려고 하는데 

 * 조회 조건이 기준월 이전에 재직중이면 안됩니다(퇴사일이 없는것)

  1.   즉   7월  30일   기준으로   뽑는다고 했을떄, 기준월 이전달에   05.12일에 이씨가 재직중이므로

        A 업체는 조회가 되지 말아야 하며

  2.  5월 30일 기준으로 뽑는다고 했을때  기준월 이전달   재직중인 사람이 없으므로

      A 업체는 조회가 되야 합니다

 

정리하자면  A업체가 신규 발생업체로 조회되는지,   조회되지 말아야하는지의 조건이고

조회기준월 이전월에 재직중인 사람이 있으면 조회되지 말아야하며

이전월에 재직중인 사람이 없을때만 A가 조회되게 해야 합니다

 

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

WITH tbl AS
(
SELECT 'A' cd, '차씨' nm, '2016.04.12' sdt, '2016.04.24' edt FROM dual
UNION ALL SELECT 'A', '김씨', '2016.05.12', ''           FROM dual
UNION ALL SELECT 'A', '이씨', '2016.06.12', '2016.06.19' FROM dual
UNION ALL SELECT 'A', '박씨', '2016.07.12', ''           FROM dual
UNION ALL SELECT 'A', '손씨', '2016.08.12', '2016.08.30' FROM dual
)
SELECT DISTINCT cd
  FROM tbl m
 WHERE sdt LIKE '2016.05'||'%'
   AND NOT EXISTS (SELECT 1
                     FROM tbl s
                    WHERE sdt < '2016.05'
                      AND NVL(edt, '9999.12.31') > '2016.05'
                      AND s.cd = m.cd
                   )
;

마농(manon94)님이 2016-08-26 17:19에 작성한 댓글입니다.
이 댓글은 2016-08-26 17:47에 마지막으로 수정되었습니다.

WITH TBL AS (

SELECT 'A' AGENT, 'CHA' NAME, '04.12' IN_DATE, '04.24' OUT_DATE FROM DUAL UNION ALL

SELECT 'A' AGENT, 'KIM' NAME, '05.12' IN_DATE, '' OUT_DATE FROM DUAL UNION ALL

SELECT 'A' AGENT, 'LEE' NAME, '06.12' IN_DATE, '06.19' OUT_DATE FROM DUAL UNION ALL

SELECT 'A' AGENT, 'PARK' NAME, '07.12' IN_DATE, '' OUT_DATE FROM DUAL UNION ALL

SELECT 'B' AGENT, 'PARK' NAME, '07.12' IN_DATE, '' OUT_DATE FROM DUAL UNION ALL

SELECT 'A' AGENT, 'SON' NAME, '08.12' IN_DATE, '08.30' OUT_DATE FROM DUAL

)

SELECT * FROM TBL A

WHERE NOT EXISTS (

SELECT 1 FROM TBL

WHERE ADD_MONTHS(TO_DATE('07.30', 'MM.DD'), -1) BETWEEN TO_DATE(IN_DATE, 'MM.DD') AND NVL(TO_DATE(OUT_DATE, 'MM.DD'), SYSDATE)

AND AGENT = A.AGENT

)

 

1111님이 2016-08-26 17:45에 작성한 댓글입니다. Edit

 감사합니다

원하는 결과를 얻었습니다

매수신호님이 2016-08-26 18:00에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41227로그성 데이터 쿼리 문의 드립니다. [5]
쿼리OTL
2016-08-29
7418
41226급합니다 도와주세요 마감과 당월까지의 합게 [1]
울산
2016-08-29
7320
41225간단한 날짜 쿼리 [2]
울산
2016-08-26
7223
41224이 쿼리 도움 부탁드립니다 [3]
매수신호
2016-08-26
7525
41223양쪽방향에 따른 계산 그리고 결과(도와주세요) [10]
기쁨이
2016-08-26
7467
41222oracle procedure subquery 사용 [2]
김정환
2016-08-26
6736
41221오라클 프로시저에서 in 변수로 던진값 사용법문의입니다 [1]
초보자
2016-08-26
6987
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다