By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE Table1
(ID int, Name varchar(5), Place varchar(9), "Date" varchar(9))
;
INSERT ALL
INTO Table1(ID, Name, Place, "Date") VALUES(1, 'User1', 'Chennai', '01-Jun-22')
INTO Table1(ID, Name, Place, "Date") VALUES(1, 'User1', 'Chennai', '02-Jun-22')
INTO Table1(ID, Name, Place, "Date") VALUES(2, 'User2', 'Bangalore', '03-Jun-22')
INTO Table1(ID, Name, Place, "Date") VALUES(2, 'User2', 'Bangalore', '04-Jun-22')
INTO Table1(ID, Name, Place, "Date") VALUES(1, 'User1', 'Bangalore', '05-Jun-22')
INTO Table1(ID, Name, Place, "Date") VALUES(1, 'User1', 'Bangalore', '06-Jun-22')
INTO Table1(ID, Name, Place, "Date") VALUES(1, 'User1', 'Bangalore', '07-Jun-22')
INTO Table1(ID, Name, Place, "Date") VALUES(1, 'User1', 'Chennai', '08-Jun-22')
SELECT 1 FROM dual;
8 rows affected
WITH CT1 AS
(
SELECT ID, Name, Place, "Date",
CASE WHEN CONCAT(ID,Place) != LAG(CONCAT(ID,Place),1,'0') OVER(ORDER BY "Date") THEN 1 ELSE 0END as t
FROM Table1
),
CT2 AS
(
SELECT ID, Name, Place, "Date",
SUM(t) OVER(ORDER BY "Date") as grp
FROM CT1
)
SELECT ID, Name, Place,
MIN("Date") as From_Date,
MAX("Date") as To_Date
FROM CT2
GROUP BY ID, Name, Place,grp
ORDER BY From_Date;
ID | NAME | PLACE | FROM_DATE | TO_DATE |
---|---|---|---|---|
1 | User1 | Chennai | 01-Jun-22 | 02-Jun-22 |
2 | User2 | Bangalore | 03-Jun-22 | 04-Jun-22 |
1 | User1 | Bangalore | 05-Jun-22 | 07-Jun-22 |
1 | User1 | Chennai | 08-Jun-22 | 08-Jun-22 |