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 23842 게시물 읽기
No. 23842
쿼리 질문입니다.. 날짜문제
작성자
버기
작성일
2005-08-26 15:59
조회수
1,402

 

ID TRDT_DATE PAYAMT
1 2005-05 400
1 2005-06 300
1 2005-07 350
2 2005-05 320
2 2005-07 400
2 2005-09 450
3 2005-05 330


 

이런 테이블에서 연속된 TRDT_DATE가 3달 이상되는 ID를 뽑고 싶습니다. 어떻게 해야 좋을까요?

 

그러니깐 예를 들면 ID가 1인 사람은 TRDT_DATE 가 2005-05월, 6월, 7월 이렇게 연속된 3달이 존재하니깐.

이런 사람들 ID를 뽑고 싶습니다.

 

고수님들의 도움이 필요해요~

 

 

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

SELECT ID, TO_CHAR(TD1,'YYYY-MM') TD1, TO_CHAR(TD2,'YYYY-MM') TD2, TO_CHAR(TD3,'YYYY-MM') TD3, PAYAMT
FROM (
SELECT ID, TD1, TD2, LAG(TD2) OVER (PARTITION BY ID ORDER BY TD2) TD3, PAYAMT
FROM (
SELECT ID, TO_DATE(TRDT_DATE,'YYYY-MM') TD1,
    LAG(TO_DATE(TRDT_DATE,'YYYY-MM')) OVER (PARTITION BY ID ORDER BY TRDT_DATE) TD2,
    PAYAMT
FROM (
SELECT 1 ID, '2005-05' TRDT_DATE, 400 PAYAMT FROM DUAL
UNION ALL SELECT 1 ID, '2005-06' TRDT_DATE, 300 PAYAMT FROM DUAL
UNION ALL SELECT 1 ID, '2005-07' TRDT_DATE, 350 PAYAMT FROM DUAL
UNION ALL SELECT 2 ID, '2005-05' TRDT_DATE, 320 PAYAMT FROM DUAL
UNION ALL SELECT 2 ID, '2005-07' TRDT_DATE, 400 PAYAMT FROM DUAL
UNION ALL SELECT 2 ID, '2005-09' TRDT_DATE, 450 PAYAMT FROM DUAL
UNION ALL SELECT 3 ID, '2005-05' TRDT_DATE, 330 PAYAMT FROM DUAL
) )
ORDER BY ID, TD1
) WHERE MONTHS_BETWEEN(TD1, TD2) = 1 AND  MONTHS_BETWEEN(TD2, TD3) = 1

 

대충 만들어 봤는데 참고하세요 ^^

소닉님이 2005-08-26 17:14에 작성한 댓글입니다. Edit

테이블명이 tab1 이라고 할때,.....

 

SELECT DISTINCT ID
           FROM (SELECT     c.ID,
                              LENGTH
                                 (SYS_CONNECT_BY_PATH (c.trdt_date, '/')
                                 )
                            / 8 AS cont_mon
                       FROM (SELECT   a.ID, a.trdt_date, b.ID AS id_2,
                                      b.trdt_date AS trdt_date_2
                                 FROM tab1 a, tab1 b
                                WHERE a.ID = b.ID(+)
                                  AND a.trdt_date =
                                         TO_CHAR (TO_DATE (b.trdt_date(+),
                                                           'YYYY-MM') - 1,
                                                  'YYYY-MM'
                                                 )
                             ORDER BY a.ID, a.trdt_date) c
                 CONNECT BY PRIOR c.trdt_date_2 = c.trdt_date
                        AND PRIOR c.id_2 = c.ID) d
          WHERE d.cont_mon >= 3

장진주(zozogirl)님이 2005-08-26 22:40에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
23845데이터가 한꺼번에 insert가 안되네요..도와주세요..^^ [1]
leebok
2005-08-26
1066
23844쿼리문 보시구 틀린 부분 지적을 좀 해주세요 [2]
zeros
2005-08-26
951
23843pl/sql syntax질문입니다. [4]
김진완
2005-08-26
1506
23842쿼리 질문입니다.. 날짜문제 [2]
버기
2005-08-26
1402
23841EXEC SQL EXECUTE 사용시 에러
강진우
2005-08-26
1518
23840replication 포기 T.T [4]
유진범
2005-08-26
3384
23838오라클에서 100만건 페이징 질문 입니다. [1]
BirdShim
2005-08-26
1961
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다