I want to get the top value in each group based on ID_DATE column from the following record. Group by ID_TOPIC
CREATE TABLE DA_TBL(
DATA_ID VARCHAR2(50),
REF_DESC VARCHAR2(50),
DATE_L DATE NOT NULL,
ID_TOPIC VARCHAR2(50),
ID_DATE NUMBER
);
INSERT all
INTO DA_TBL VALUES ('1','sample 1',CURRENT_TIMESTAMP, 'local', 1)
INTO DA_TBL VALUES ('2','sample 2',CURRENT_TIMESTAMP, 'tradition', 2)
INTO DA_TBL VALUES ('3','sample 2',CURRENT_TIMESTAMP, 'gospel', 3)
INTO DA_TBL VALUES ('4','sample 4',CURRENT_TIMESTAMP, 'local', 4)
INTO DA_TBL VALUES ('5','sample 5',CURRENT_TIMESTAMP, 'gospel', 5)
INTO DA_TBL VALUES ('6','sample 6',CURRENT_TIMESTAMP, 'tradition', 6)
INTO DA_TBL VALUES ('7','sample 7',CURRENT_TIMESTAMP, 'gospel', 7)
INTO DA_TBL VALUES ('8','sample 8',CURRENT_TIMESTAMP, 'local', 8)
INTO DA_TBL VALUES ('9','sample 9',CURRENT_TIMESTAMP, 'tradition', 9)
INTO DA_TBL VALUES ('10','sample 10',CURRENT_TIMESTAMP, 'local', 10)
INTO DA_TBL VALUES ('11','sample 11',CURRENT_TIMESTAMP, 'gospel', 11)
SELECT * FROM dual;
What I want is:
DATA_ID|REF_DESC |ID_TOPIC |ROWNUMBER|
-------|---------|---------|---------|
9 |sample 9 |tradition| 1|
10 |sample 10|local | 1|
11 |sample 11|gospel | 1|
What I get is:
DATA_ID|REF_DESC|ID_TOPIC |ROWNUMBER|
-------|--------|---------|---------|
9 |sample 9|tradition| 1|
8 |sample 8|local | 1|
7 |sample 7|gospel | 1|
What I have tried
SELECT *
FROM (SELECT DATA_ID, REF_DESC, ID_TOPIC
, ROW_NUMBER() OVER (PARTITION BY ID_TOPIC ORDER BY DATA_ID DESC) AS rownumber
FROM DA_TBL ORDER BY DATA_ID DESC)
WHERE rownumber = 1;