I am trying to achieve the following in: DATE_2 column 1.The first result I always take it from DATE_1 column " 25-JUN-18", then I have to do a comparison. if DATE_1, rn 2, 25-JUN-18 > DATE_2, rn 1, 25-JUN-18 then DATE_1, rn 2, 25-JUN-18 else DATE_2, rn 1, 25-JUN-18 end DATE_2
Current result
rn DATE_1 DATE_2
1 25-JUN-1 25-JUN-18
2 25-JUN-18 NULL
3 25-JUN-18 NULL
4 09-JAN-19 NULL
5 02-SEP-20 NULL
6 01-DEC-23 NULL
7 01-DEC-23 NULL
Expected result
rn DATE_1 DATE_2
1 25-JUN-18 25-JUN-18
2 25-JUN-18 25-JUN-18
3 25-JUN-18 25-JUN-18
4 09-JAN-19 09-JAN-19
5 02-SEP-20 02-SEP-20
6 01-DEC-23 01-DEC-23
7 01-DEC-23 01-DEC-23
this is the result of the main table
CREATE TABLE tbl22
(MAXDATE, RN) AS
SELECT '25-JUN-18', 1 FROM DUAL UNION ALL
SELECT '25-JUN-18', 2 FROM DUAL UNION ALL
SELECT '25-JUN-18', 3 FROM DUAL UNION ALL
SELECT '09-JAN-19', 4 FROM DUAL UNION ALL
SELECT '02-SEP-20', 5 FROM DUAL UNION ALL
SELECT '01-DEC-23', 6 FROM DUAL UNION ALL
SELECT '01-DEC-23', 7 FROM DUAL UNION ALL
SELECT '02-SEP-20', 8 FROM DUAL UNION ALL
SELECT '01-DEC-23', 9 FROM DUAL UNION ALL
SELECT '02-SEP-20', 10 FROM DUAL UNION ALL
SELECT '01-DEC-23', 11 FROM DUAL
What i should get; should always remain the largest date
25-Jun-18
25-Jun-18
25-Jun-18
9-Jan-19
2-Sep-20
1-Dec-23
1-Dec-23
1-Dec-23
1-Dec-23
1-Dec-23
1-Dec-23
I tried many times to use LEAD and LAG. But I was not able to achieve the required result
Make sure the maxdate column data type really is date. Then use MAX()
window function:
select rn, maxdate, max(maxdate) over (order by rn)
from tbl22
Demo:
CREATE TABLE tbl22 (rn int, maxdate date);
insert into tbl22 (maxdate, rn)
SELECT date'2018-06-25', 1 FROM DUAL UNION ALL
SELECT date'2018-06-25', 2 FROM DUAL UNION ALL
SELECT date'2018-06-25', 3 FROM DUAL UNION ALL
SELECT date'2019-01-09', 4 FROM DUAL UNION ALL
SELECT date'2020-09-02', 5 FROM DUAL UNION ALL
SELECT date'2023-12-01', 6 FROM DUAL UNION ALL
SELECT date'2023-12-01', 7 FROM DUAL UNION ALL
SELECT date'2020-09-02', 8 FROM DUAL UNION ALL
SELECT date'2023-12-01', 9 FROM DUAL UNION ALL
SELECT date'2020-09-02', 10 FROM DUAL UNION ALL
SELECT date'2023-12-01', 11 FROM DUAL;
select rn, maxdate, max(maxdate) over (order by rn) from tbl22
RN MAXDATE MAX(MAXDATE)OVER(ORDERBYRN)
1 25-JUN-18 25-JUN-18
2 25-JUN-18 25-JUN-18
3 25-JUN-18 25-JUN-18
4 09-JAN-19 09-JAN-19
5 02-SEP-20 02-SEP-20
6 01-DEC-23 01-DEC-23
7 01-DEC-23 01-DEC-23
8 02-SEP-20 01-DEC-23
9 01-DEC-23 01-DEC-23
10 02-SEP-20 01-DEC-23
11 01-DEC-23 01-DEC-23