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
운영게시판
최근게시물
MS-SQL Q&A 1987 게시물 읽기
No. 1987
중복을 제거한 목록을 뽑을 때...
작성자
속도
작성일
2005-05-25 19:07
조회수
3,196

 

id logdate
a 20050101
a 20050201
b 20050203
c 20050105
b 20050113
b 20050102


 

위와 같은 테이블에서 로그 날짜가 1월에도 있으면서 2월에 있는 id를 뽑으려고 합니다.

이때 뽑은 id목록은 중복을 제외한 목록이어야 합니다. 어떻게 해야 할까요?

지금 생각 나는 방법은...

select id from table where logdate >= '20050201' and logdate < '20050301'

and id in (

select id from table where logdate >= '20050101' and logdate < '20050201' group by id

) group by id

이런 쿼리가 생각 나는데요,

exitsts 와 in ,

distinct 와 group by

이중에 어느 것이 속도가 빠를까요?

 

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

제 생각에는 logdate 클러스터드 인덱스 함 때리고

id 난클러스티드 인덱스 함 때리고

in 으로

쿼리 하면서 plan 을 살펴보심이 좋을것 같습니다.

 

 

석이님이 2005-05-25 19:41에 작성한 댓글입니다. Edit

select id

from (

        select id, left(logdate, 6) mm

        from table

        where logdate between '20050101' and '20050228'

        group by id, left(logdate, 6)

        ) a

group by id

having count(*) > 1

 

이런 방식은 어떨까요?

 

글구 먼저 쓰신 문장은

정확히 하시려면

 

select distinct id

from table a

where a.logdate between '20050101' and '20050131'

and exists (select 'x'

                  from table b

                  where a.id = b.id

                  and b.logdate between '20050201' and '20050228')

이렇게 해야 겠죠..

 

효율적인 것을 쓰시면 될 듯..

 

logdate에 인덱스가 있다면 두번째도 별로 불리할게 없어 보이네요.

m님이 2005-05-26 09:39에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1990특징좀 간단히 설명좀 해주세요. [1]
학생
2005-05-30
1491
1989mssql.lib에러인데요.. [2]
김지민
2005-05-27
1777
1988foreign key 가 꼭필요한 건가요? [7]
류풍산
2005-05-26
15366
1987중복을 제거한 목록을 뽑을 때... [2]
속도
2005-05-25
3196
1986특정 일련번호를 부여하고 싶은데요.
DB초짜
2005-05-25
2499
1985질문입니다.중복처리. [1]
초보자
2005-05-25
2499
1984SQLIOstress 로그좀 설명좀 해주세요..
정종준
2005-05-25
2641
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다