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 41930 게시물 읽기
No. 41930
조인 관련 문의 드립니다.
작성자
최상민(roice81)
작성일
2023-02-16 16:12
조회수
600

문제를 폴다풀다 답답해서 문의 드립니다.



select master_id, oper_Dt, S_val1, Sval2

from price_the



select master_id ,START_DT, END_DT, val1, val2, val3

from

    (

    SELECT master_id ,START_DT, END_DT, val1, val2, val3

    , ROW_NUMBER() OVER (PARTITION BY master_id ORDER BY START_DT) RN

    FROM PRICE_MON 

    where master_id = '114501'

     and end_dt >= '20221101'

    )

where rn = 1


두개의 테이블을 가지고 조인을 하려고 하는데 조인이 안되네요


제가 얻고자 하는 정보는 master_id, oper_Dt, S_val1, Sval2, val1, val2, val3 입니다.


임시 방편으로 만든 쿼리가 있는데 뭔가 비효율적이라 문의 드립니다.


select master_id, oper_Dt, S_val1, Sval2

,   (

    select val1

    from

        (

        SELECT master_id ,START_DT, END_DT, val1, val2, val3

        , ROW_NUMBER() OVER (PARTITION BY master_id ORDER BY START_DT) RN

        FROM PRICE_MON B

        where B.master_id = A.master_id

        and B.end_dt >= a.oper_dt

        )

    where rn = 1

    ) val1

,   (

    select val2

    from

        (

        SELECT master_id ,START_DT, END_DT, val1, val2, val3

        , ROW_NUMBER() OVER (PARTITION BY master_id ORDER BY START_DT) RN

        FROM PRICE_MON B

        where B.master_id = A.master_id

        and B.end_dt >= a.oper_dt

        )

    where rn = 1

    ) val2

,   (

    select val3

    from

        (

        SELECT master_id ,START_DT, END_DT, val1, val2, val3

        , ROW_NUMBER() OVER (PARTITION BY master_id ORDER BY START_DT) RN

        FROM PRICE_MON B

        where B.master_id = A.master_id

        and B.end_dt >= a.oper_dt

        )

    where rn = 1

    ) val3

from price_the a



개선할수 있는 방법이 있을까요???

 

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

안녕하세요. 이렇게 해봤습니다.


select *

from

    (

    SELECT B.master_id , B.oper_dt, B.s_val1, B.s_val2, A.val1, A.val2, A.val3

    , ROW_NUMBER() OVER (PARTITION BY A.master_id ORDER BY A.START_DT) RN

    FROM PRICE_MON A, PRICE_THE B

    where A.master_id = B.master_id

     and A.end_dt >= B.oper_dt

     and B.master_id = '114501'

     and B.oper_dt >= '20221101'

    )

where rn = 1

정상규(pajama)님이 2023-02-16 16:30에 작성한 댓글입니다.
이 댓글은 2023-02-16 16:31에 마지막으로 수정되었습니다.

답변 감사드립니다

설명이 조금 부족했던것 같습니다 


MASTER_ID와 END_DT 값은 

PRICE_THE테이블의 MASTER_ID, OPER_DT가 가변 적인 변수 입니다.


PRICE_MON의 해당하는 조건의 ROWNUM을 계산해서 RN이 1인 값을 나열하고자 합니다.


번거롭게 해서 죄송합니다,.


 

최상민(roice81)님이 2023-02-16 16:46에 작성한 댓글입니다.
SELECT *
  FROM (SELECT a.master_id
             , a.oper_dt
             , a.s_val1
             , a.sval2
             , b.val1
             , b.val2
             , b.val3
             , ROW_NUMBER() OVER(PARTITION BY a.master_id, a.oper_dt
                                     ORDER BY b.start_dt) rn
          FROM price_the a
         INNER JOIN price_mon b
            ON a.master_id = b.master_id
           AND a.oper_dt  <= b.end_dt
        ) c
 WHERE rn = 1
;
마농(manon94)님이 2023-02-21 12:26에 작성한 댓글입니다.
이 댓글은 2023-02-21 12:27에 마지막으로 수정되었습니다.

정상규님 마농님 너무 감사합니다

최상민(roice81)님이 2023-02-22 15:02에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41933sqldeveloper 죽었니? 살았니? [1]
전상도
2023-02-28
633
41932row 복사하기 문의드립니다. [2]
최상민
2023-02-22
541
41931기간을 보고 몇개월인지 확인하려고 합니다. [2]
임서화
2023-02-20
556
41930조인 관련 문의 드립니다. [4]
최상민
2023-02-16
600
41929인덱스를 logging 모드로 운영할 필요가 있을까요? [5]
나그네
2023-01-17
583
41928오라클 sched.jobs 생성시 시간 설정문의 [2]
량디
2023-01-05
658
41901그룹 관련 질문 입니다. [2]
봉달이
2022-12-27
831
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.054초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다