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
운영게시판
최근게시물
DBMS Q&A 1141 게시물 읽기
No. 1141
중복을 제거한 값을 뽑고자 합니다.
작성자
배한직(bhjo0070)
작성일
2005-07-02 18:20
조회수
10,609

혼자 고민하다 고수님들의 고견을 얻고자 합니다.

소스자료는

이름 시작 종료

홍길동 1000 1500

홍길동 1100 1700

홍길동 1800 1900

강감찬 0900 1000

이순신 1000 1400

 

출력하고자 하는 자료는

홍길동 1000 1700

홍길동 1800 1900

강감찬 0900 1000

이순신 1000 1400

 

즉 중복을 제거하면서 최소시간부터 최고시간까지를 구하고자 합니다.

여러 고수님들의 고견을 기다리며....

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

create table test (name char(10), i1 integer, i2 integer);

insert into test values ('홍길동',  1000, 1500);
insert into test values ('홍길동',  1100, 1700);
insert into test values ('홍길동',  1800, 1900);
insert into test values ('강감찬',  0900, 1000);
insert into test values ('이순신',  1000, 1400);

select NAME, MIN(I1), MAX(I2) from TEST GROup by name;

 

 

NAME        MIN(I1)     MAX(I2)    
----------------------------------------
홍길동      1000        1900       
강감찬      900         1000       
이순신      1000        1400       
3 rows selected.

 

이걸 말씀하시는건지요??

호랑이님이 2005-07-04 13:32에 작성한 댓글입니다. Edit

제가 원하는 답은

홍길동 1000  1700

홍길동 1800   1900

강참찬 900    1000

이순신 1000   1400

 

입니다.

즉 홍길동이 1100부터 1500까지 중복되어 있고

이를 제거하고 자료를 뽑아내고자 합니다.

고수님의 고견을 기다리며...

배한직(bhjo0070)님이 2005-07-05 06:51에 작성한 댓글입니다.

 

SELECT
       A.NAME,
       A.START_SEQ,
       A.END_SEQ
  FROM TEST_SQL A,
       (SELECT
               NAME,
               MIN(START_SEQ) AS START_SEQ
          FROM TEST_SQL
         GROUP BY NAME ) B
 WHERE A.NAME = B.NAME
   AND A.START_SEQ = B.START_SEQ
UNION
SELECT
       A.NAME,
       A.START_SEQ,
       A.END_SEQ
  FROM TEST_SQL A,
       (SELECT
               NAME,
               MAX(END_SEQ) AS END_SEQ
          FROM TEST_SQL
         GROUP BY NAME ) B
 WHERE A.NAME = B.NAME
   AND A.END_SEQ = B.END_SEQ

 

좀 무식해 보이는건가 ;;;

홍진웅님이 2005-07-05 13:58에 작성한 댓글입니다. Edit

select name "name", min(i1) "start", i2 "end"
from (select x.name, x.i1, (select max(y.i2)
                                        from "test" y
                                        where x.name = y.name
                                           and x.i2 between y.i1 and y.i2)
         from "test" x) as z(name, i1, i2)
group by name, i2;

=== <Result of SELECT Command in Line 13> ===

  name                        start          end
================================================
  '강감찬    '                  900         1000
  '이순신    '                 1000         1400
  '홍길동    '                 1000         1700
  '홍길동    '                 1800         1900


4 rows selected.

UniSQL님이 2005-07-05 19:05에 작성한 댓글입니다. Edit

오호~

이경환(babocom)님이 2005-07-06 10:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1150[질문]dba 와 dbo의 역할 [1]
최민
2005-08-29
10175
1144오라클 에러코드 [1]
박오근
2005-07-06
11075
1143OS별 지원되는 DBMS의 종류 [3]
홍성호
2005-07-05
11638
1141중복을 제거한 값을 뽑고자 합니다. [5]
배한직
2005-07-02
10609
1139쿼리문 작성.. 도와주세요.. ㅠㅠ [3]
김중생
2005-06-16
9596
1137MFC,C#,JAVA 를 이용한 데이터베이스 프로그래밍의 핵심기술 [1]
이영훈
2005-06-14
10494
1136Cursor사용시 DBMS Call관련 질문 [1]
임혜순
2005-06-10
9497
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다