I want to take a max date from a timestamp datatype in oracle
my data look like this
x
id updated_date
-- -------------------
1 2011-12-21 10:34:24
1 2011-12-21 09:52:15
1 2011-12-21 10:02:49
Since all the date are same but timestamp is difference the max function bringing all the 3 rows instead i want to see the max date with latest timestamp for each ID like below
Select MAX(updated_date) update_date, id FROM id_table group by id;
id updated_date
-- -------------------
1 2011-12-21 10:34:24
thanks in advance
The table as 10000 plus rows, the data looks like below
id updated_date
-- -------------------
1 2011-12-21 10:34:24
1 2011-12-21 09:52:15
1 2011-12-21 10:02:49
2 2011-13-21 10:34:24
2 2011-13-21 09:52:15
2 2011-13-21 10:02:49
3 2011-14-21 10:34:24
3 2011-14-21 09:52:15
3 2011-14-21 10:02:49
On select i want to see 1 row per id no duplicates Select MAX(updated_date) update_date, id FROM id_table group by id;
id updated_date
-- -------------------
1 2011-12-21 10:34:24
2 2011-13-21 10:34:24
3 2011-14-21 10:34:24
Advertisement
Answer
You may use the FIRST
aggregate function or row_number()
.
1.
SELECT MAX(id) KEEP(DENSE_RANK FIRST ORDER BY updated_date DESC) AS id,
MAX(updated_date) update_date
FROM id_table;
2.
SELECT id,
updated_date
FROM (
SELECT i.*,
ROW_NUMBER() OVER(
ORDER BY updated_date DESC
) AS rn
FROM id_table i
)
WHERE rn = 1;
Bonus ( for Oracle 12c and above) :
select * from id_table
ORDER BY updated_date DESC FETCH FIRST 1 ROWS ONLY