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 39634 게시물 읽기
No. 39634
distinct ? Group by ? .. 근무시작일과 근무종료일을 합칠경우.
작성자
EJ
작성일
2012-09-11 16:14
조회수
4,817

 

 

usrId usrNm issSeq issDt issCd appDt canDt place
aaa001 홍길동 seq00001 20051027 10 20051027   전남
aaa001 홍길동 seq00002 20121026 20   20121026 전남
aaa002 이순신 seq00003 20061222 10 20061222   전남
aaa002 이순신 seq00004 20121221 20   20121221 전남
aaa004 김홍동 seq00005 20061018 10 20061018   전남
aaa004 김홍동 seq00006 20121017 20   20121017 전남
aaa005 최자 seq00007 19981101 10 19981101   서울
aaa005 최자 seq00008 20121204 20   20121204 서울
aaa007 이미 seq00009 20010704 10 20010704   경남
aaa007 이미 seq00010 20060921 20   20060921 경남
aaa007 이미 seq00011 20060921 10 20060921   경남
aaa007 이미 seq00012 20120920 20   20120920 경남
aaa008 박호 seq00013 20060912 10 20060912   충남
aaa008 박호 seq00014 20120911 20   20120911 충남
aaa006 김길동 seq00015 20001006 10 20001006   경남
aaa006 김길동 seq00016 20061005 20   20061005 경남
aaa006 김길동 seq00017 20061006 10 20061006   경남
aaa006 김길동 seq00018 20121005 20   20121005 경남
aaa003 주최자 seq00019 20060907 10 20060907   부산
aaa003 주최자 seq00020 20120906 20   20120906 부산
aaa003 주최자 seq00021 20120907 10 20120907   부산

위와 같은 형태의 테이블과 데이터가 있는경우,

 

appDt는 근무시작일, canDt는 근무종료일입니다.

종료일이 없는경우는 아직 근무중인것이구요.

 

테이블의 PK는 issSeq 이구요. issCd 는 근무시작(10)인지, 근무종료(20)인지 코드값입니다.

 

현재와 같을경우,  근무시작일과 종료일을 같은 ROW에 둘순없을까요?.. issSeq, issDt, issCd 는 종료일 기준으로 가지고 오고,

종료가 없고 시작만 있는 사람의 경우. 시작 열을 그대로 두구요,

아니면 issSeq, issDt, issCd를 시작으로 냅둬도됩니다.

 

usrId usrNm issSeq issDt issCd appDt canDt place
aaa001 홍길동 seq00002 20121026 20 20051027 20121026 전남
aaa002 이순신 seq00004 20121221 20 20061222 20121221 전남
aaa004 김홍동 seq00006 20121017 20 20061018 20121017 전남
aaa005 최자 seq00008 20121204 20 19981101 20121204 서울
aaa007 이미 seq00010 20060921 20 20010704 20060921 경남
aaa007 이미 seq00012 20120920 20 20060921 20120920 경남
aaa008 박호 seq00014 20120911 20 20060912 20120911 충남
aaa006 김길동 seq00016 20061005 20 20001006 20061005 경남
aaa006 김길동 seq00018 20121005 20 20061006 20121005 경남
aaa003 주최자 seq00020 20120906 20 20060907 20120906 부산
aaa003 주최자 seq00021 20120907 10 20120907   부산

 

데이터가 이렇게 나오게 할순없을까요?.

 

그리고, 특정날짜에 근무중이었던 사람을 조건으로 검색하는 방법이욤.

 

도저히 생각을 해봐도 답이 안나오네요.ㅠㅠ

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

1. 데이터가 이렇게 나오게 할순없을까요?.
SELECT
   usrId
  ,MAX(usrNm)
  ,MAX(issSeq)
  ,MAX(issDt)
  ,MAX(issCd)
  ,MIN(appDt)
  ,MAX(canDt)
  ,MAX(place)
FROM (
 SELECT
    usrId
   ,usrNm
   ,issSeq
   ,issDt
   ,issCd
   ,row_number() OVER (partition by usrid order by issseq)*10 rn
   ,appDt
   ,canDt
   ,place
 FROM  tab
 )
GROUP BY USRID, issCd-RN
ORDER BY 3


2. 특정날짜에 근무중이었던 사람을 조건으로 검색하는 방법이욤
SELECT
   usrId
  ,MAX(usrNm)
  ,MAX(issSeq)
  ,MAX(issDt)
  ,MAX(issCd)
  ,MIN(appDt)
  ,MAX(canDt)
  ,MAX(place)
FROM (
 SELECT
    usrId
   ,usrNm
   ,issSeq
   ,issDt
   ,issCd
   ,row_number() OVER (partition by usrid order by issseq)*10 rn
   ,appDt
   ,canDt
   ,place
 FROM  tab
 )
GROUP BY USRID, issCd-RN
HAVING (:DT BETWEEN MIN(appDt) AND MAX(canDt))
    OR (:DT >= MIN(appDt) AND MAX(canDt) IS NULL)
ORDER BY 3

dol님이 2012-09-12 15:27에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39637DB속도가 느려지고 ALRT LOG에 이렇게 자꾸보이네요 도와주세요
말하자
2012-09-12
4977
39636한 row로 select하기 도와주세요 ㅠㅠ [1]
알티
2012-09-11
4612
39635주(week) 혹은 기간단위로 between 하기 [3]
김홍찬
2012-09-11
4455
39634distinct ? Group by ? .. 근무시작일과 근무종료일을 합칠경우. [1]
EJ
2012-09-11
4817
39633sql 동적 쿼리 도움 좀 부탁 드립니다. [1]
김기훈
2012-09-11
4892
39632기간 건수 합계 구하기 [2]
마루아라
2012-09-10
4554
39631쿼리 질문입니다.. [1]
삐에로
2012-09-10
4106
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다