나는 테이블을 단순화했지만 근본적으로 cycle_no 및 종료 날짜가있는 계정 테이블이 있습니다. 이 종료일은 항상 첫 번째 달로 설정되지만 캘린더 세부 정보 표를보고 실제 종료일을 가져와야합니다. 실제 종료일은이주기의 다음 날짜입니다. 오라클의 하위 쿼리에서 참조 테이블
는 간단한 테이블을 생성하고 데이터의 몇 행을 입력 :CREATE TABLE DATA_OWNER.ACCOUNT
(
ACCNO NUMBER(4),
CYCLE_NO NUMBER(4),
ENDDATE DATE
);
CREATE TABLE DATA_OWNER.CALENDAR_DETAILS
(
CALENDAR_DT DATE,
BILL_CYCL_NO NUMBER(4)
);
INSERT INTO calendar_Details
VALUES
('18/DEC/2017',
17);
INSERT INTO calendar_Details
VALUES
('23/DEC/2017',
20);
INSERT INTO calendar_Details
VALUES
('18/JAN/2018',
17);
INSERT INTO calendar_Details
VALUES
('23/JAN/2018',
20);
INSERT INTO calendar_Details
VALUES
('20/FEB/2018',
17);
INSERT INTO calendar_Details
VALUES
('21/FEB/2018',
20);
INSERT INTO account
VALUES
(1, 17, '01/DEC/2107');
INSERT INTO account
VALUES
(2, 20, '01/DEC/2107');
우리가 "ACC"을 얻을 수 있지만 우리는이 쿼리를 실행합니다. "ENDDATE": 유효하지 않은 식별자 :
SELECT accno, cycle_no, enddate, actual_date
FROM account acc
JOIN
(
SELECT MIN(calendar_dt) actual_date
FROM calendar_details cal
WHERE calendar_dt > acc.enddate
)
ON acc.cycle_no = cal.bill_cycl_no;
누구든지이 기능을 수행하는 가장 좋은 방법을 알려주시겠습니까?
오라클 버전은 무엇입니까? 12.1에서 'lateral'등을 사용할 수 있습니다. –
11g R2 – PinkSalmon