CREATE TABLE TEST_DATA(ID NUMBER, VALUE_DATE DATE, SERIAL NUMBER);
SELECT ID, VALUE_DATE, SERIAL
FROM TEST_DATA
ORDER BY 1, 2,3;
SET DEFINE OFF;
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(1, TO_DATE('09/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(2, TO_DATE('09/03/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(2, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(1, TO_DATE('09/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(2, TO_DATE('09/03/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(3, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(2, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into TEST_DATA
(ID, VALUE_DATE)
Values
(3, TO_DATE('09/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
COMMIT;
BEGIN
FOR S IN (SELECT DISTINCT ID SL FROM TEST_DATA)
LOOP
FOR I IN (SELECT ROWNUM SERIAL_NUM,
ID,
VALUE_DATE,
ROWID UPDATE_NUMBER
FROM ( SELECT ID, VALUE_DATE, ROWID
FROM TEST_DATA
WHERE ID = S.SL
ORDER BY 1, 2))
LOOP
UPDATE TEST_DATA
SET SERIAL = I.SERIAL_NUM
WHERE ROWID = I.UPDATE_NUMBER;
END LOOP;
END LOOP;
END;
SELECT ID, VALUE_DATE, SERIAL
FROM TEST_DATA
ORDER BY 1, 2,3;
SQL> CREATE TABLE TEST_DATA(ID NUMBER, VALUE_DATE DATE, SERIAL NUMBER);
Table created.
SQL>
SQL> SELECT ID, VALUE_DATE, SERIAL
2 FROM TEST_DATA
3 ORDER BY 1, 2,3;
no rows selected
SQL>
SQL> SET DEFINE OFF;
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (1, TO_DATE('09/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (2, TO_DATE('09/03/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (2, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (1, TO_DATE('09/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (1, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (2, TO_DATE('09/03/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (3, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (2, TO_DATE('09/01/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> Insert into TEST_DATA
2 (ID, VALUE_DATE)
3 Values
4 (3, TO_DATE('09/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
1 row created.
SQL> COMMIT;
Commit complete.
SQL>
SQL> BEGIN
2 FOR S IN (SELECT DISTINCT ID SL FROM TEST_DATA)
3 LOOP
4 FOR I IN (SELECT ROWNUM SERIAL_NUM,
5 ID,
6 VALUE_DATE,
7 ROWID UPDATE_NUMBER
8 FROM ( SELECT ID, VALUE_DATE, ROWID
9 FROM TEST_DATA
10 WHERE ID = S.SL
11 ORDER BY 1, 2))
12 LOOP
13 UPDATE TEST_DATA
14 SET SERIAL = I.SERIAL_NUM
15 WHERE ROWID = I.UPDATE_NUMBER;
16 END LOOP;
17 END LOOP;
18 END;
19 /
PL/SQL procedure successfully completed.
SQL>
SQL> SELECT ID, VALUE_DATE, SERIAL
2 FROM TEST_DATA
3 ORDER BY 1, 2,3;
ID VALUE_DAT SERIAL
---------- --------- ----------
1 01-SEP-14 1
1 01-SEP-14 2
1 01-SEP-14 3
1 01-SEP-14 4
1 02-SEP-14 5
1 02-SEP-14 6
2 01-SEP-14 1
2 01-SEP-14 2
2 03-SEP-14 3
2 03-SEP-14 4
3 01-SEP-14 1
ID VALUE_DAT SERIAL
---------- --------- ----------
3 02-SEP-14 2
12 rows selected.
SQL>