의 I 당신이 작동주는 솔루션, 경우에만 경우, 열 이을 cycle_id은 테이블의 기본 키입니다.
UPDATE pl_updatetest t1
SET t1.extract_date =
(
SELECT t2.extract_date
FROM pl_updatetest t2
WHERE t1.cycle_id = t2.cycle_id + 1
)
WHERE t1.cycle_id <> (SELECT MIN(cycle_id) FROM pl_updatetest);
다음은이 쿼리를 사용하여 테이블을 변경하는 방법을 나타내는 테스트 캐스트입니다.
DROP TABLE pl_updatetest;
CREATE TABLE pl_updatetest
(
cycle_id NUMBER NOT NULL,
extract_date DATE NOT NULL
);
ALTER TABLE pl_updatetest ADD CONSTRAINT PK_PL_UPDATETEST
PRIMARY KEY(cycle_id);
INSERT ALL
INTO pl_updatetest(cycle_id, extract_date)
VALUES(100, TO_DATE('01-JAN-2012', 'DD-MON-YYYY'))
INTO pl_updatetest(cycle_id, extract_date)
VALUES(101, TO_DATE('02-JAN-2012', 'DD-MON-YYYY'))
INTO pl_updatetest(cycle_id, extract_date)
VALUES(102, TO_DATE('03-JAN-2012', 'DD-MON-YYYY'))
INTO pl_updatetest(cycle_id, extract_date)
VALUES(103, TO_DATE('04-JAN-2012', 'DD-MON-YYYY'))
INTO pl_updatetest(cycle_id, extract_date)
VALUES(104, TO_DATE('05-JAN-2012', 'DD-MON-YYYY'))
INTO pl_updatetest(cycle_id, extract_date)
VALUES(105, TO_DATE('06-JAN-2012', 'DD-MON-YYYY'))
SELECT * FROM DUAL;
Table dropped.
Table created.
Table altered.
6 rows created.
SQL> SELECT * FROM pl_updatetest;
CYCLE_ID EXTRACT_D
---------- ---------
100 01-JAN-12
101 02-JAN-12
102 03-JAN-12
103 04-JAN-12
104 05-JAN-12
105 06-JAN-12
6 rows selected.
SQL>
UPDATE pl_updatetest t1
SET t1.extract_date =
(
SELECT t2.extract_date
FROM pl_updatetest t2
WHERE t1.cycle_id = t2.cycle_id + 1
)
WHERE t1.cycle_id <> (SELECT MIN(cycle_id) FROM pl_updatetest);
5 rows updated.
SQL>
SQL>
SQL> SELECT * FROM pl_updatetest;
CYCLE_ID EXTRACT_D
---------- -----------
100 01-JAN-12
101 01-JAN-12
102 02-JAN-12
103 03-JAN-12
104 04-JAN-12
105 05-JAN-12
6 rows selected.
SQL>
감사
Dariyoosh는
그것은 (아주 간단) 단일 SQL 문입니다. 나는 그 문제가 무엇인지 확신 할 수 없다. – FrustratedWithFormsDesigner