Not quite sure what exactly you want. With your sample data...
WITH
tbl (A_DATE, A_NAME, IP, IP_IN, IP_OUT, A_SESSION, ACTIVITY) AS
(
Select To_Date('02/09/2023', 'mm/dd/yyyy'), 'X', 123, 123, Null, 1, 'in' From Dual Union All
Select To_Date('02/09/2023', 'mm/dd/yyyy'), 'X', 123, Null, 123, 1, 'out' From Dual Union All
Select To_Date('02/08/2023', 'mm/dd/yyyy'), 'Y', 143, Null, 143, 2, 'out' From Dual Union All
Select To_Date('02/08/2023', 'mm/dd/yyyy'), 'Y', 153, 153, Null, 2, 'in' From Dual Union All
Select To_Date('02/08/2023', 'mm/dd/yyyy'), 'X', 163, 163, Null, 3, 'in' From Dual Union All
Select To_Date('02/08/2023', 'mm/dd/yyyy'), 'X', 163, Null, 163, 3, 'out' From Dual
)
... you could do a small transformation to get all the rows with some transformed columns like here..
Select
A_NAME, IP, IP_IN, IP_OUT, A_SESSION, ACTIVITY,
CASE WHEN ACTIVITY = 'in' THEN IP_IN END "IP_IN",
CASE WHEN ACTIVITY = 'in' THEN A_DATE END "IN_DATE",
CASE WHEN ACTIVITY = 'out' THEN IP_OUT END "IP_OUT",
CASE WHEN ACTIVITY = 'out' THEN A_DATE END "OUT_DATE"
From
tbl
R e s u l t :
A_NAME IP IP_IN IP_OUT A_SESSION ACTIVITY IP_IN IN_DATE IP_OUT OUT_DATE
------ ---------- ---------- ---------- ---------- -------- ---------- --------- ---------- ---------
X 123 123 1 in 123 09-FEB-23
X 123 123 1 out 123 09-FEB-23
Y 143 143 2 out 143 08-FEB-23
Y 153 153 2 in 153 08-FEB-23
X 163 163 3 in 163 08-FEB-23
X 163 163 3 out 163 08-FEB-23
... with the resulting dataset you can do either aggregation with group by or you can use analytic functions to get what you want...
Option 1 - aggregate
Select
A_NAME, IP, A_SESSION,
MAX(CASE WHEN ACTIVITY = 'in' THEN IP_IN END) "IP_IN",
MAX(CASE WHEN ACTIVITY = 'in' THEN A_DATE END) "IN_DATE",
MAX(CASE WHEN ACTIVITY = 'out' THEN IP_OUT END) "IP_OUT",
MAX(CASE WHEN ACTIVITY = 'out' THEN A_DATE END) "OUT_DATE"
From
tbl
Group By
A_NAME, IP, A_SESSION
A_NAME IP A_SESSION IP_IN IN_DATE IP_OUT OUT_DATE
------ ---------- ---------- ---------- --------- ---------- ---------
Y 153 2 153 08-FEB-23
X 163 3 163 08-FEB-23 163 08-FEB-23
Y 143 2 143 08-FEB-23
X 123 1 123 09-FEB-23 123 09-FEB-23
Option 2 - aggregate
Select
A_NAME, IP,
MAX(CASE WHEN ACTIVITY = 'in' THEN IP_IN END) "IP_IN",
MAX(CASE WHEN ACTIVITY = 'in' THEN A_DATE END) "IN_DATE",
MAX(CASE WHEN ACTIVITY = 'out' THEN IP_OUT END) "IP_OUT",
MAX(CASE WHEN ACTIVITY = 'out' THEN A_DATE END) "OUT_DATE"
From
tbl
Group By
A_NAME, IP
A_NAME IP IP_IN IN_DATE IP_OUT OUT_DATE
------ ---------- ---------- --------- ---------- ---------
X 163 163 08-FEB-23 163 08-FEB-23
X 123 123 09-FEB-23 123 09-FEB-23
Y 153 153 08-FEB-23
Y 143 143 08-FEB-23
Option 2A - IN_DATE as VARCHAR2 (from comments)
Select A_NAME, IP,
IP_IN, CASE WHEN IN_DATE IS NULL THEN 'SESSION CLOSED' ELSE To_Char(IN_DATE, 'dd.mm.yyyy') END "IN_DATE",
IP_OUT, OUT_DATE
From
(
Select
A_NAME, IP,
MAX(CASE WHEN ACTIVITY = 'in' THEN IP_IN END) "IP_IN",
MAX(CASE WHEN ACTIVITY = 'in' THEN A_DATE END) "IN_DATE",
MAX(CASE WHEN ACTIVITY = 'out' THEN IP_OUT END) "IP_OUT",
MAX(CASE WHEN ACTIVITY = 'out' THEN A_DATE END) "OUT_DATE"
From
tbl
Group By
A_NAME, IP
)
A_NAME IP IP_IN IN_DATE IP_OUT OUT_DATE
------ ---------- ---------- -------------- ---------- ---------
X 163 163 08.02.2023 163 08-FEB-23
X 123 123 09.02.2023 123 09-FEB-23
Y 153 153 08.02.2023
Y 143 SESSION CLOSED 143 08-FEB-23
Option 3 - analytic
Select
A_NAME, IP, A_SESSION,
CASE WHEN ACTIVITY = 'in' THEN IP_IN END "MAX_IP_IN",
MAX(CASE WHEN ACTIVITY = 'in' THEN A_DATE END) OVER(Partition By A_NAME, IP) "IN_DATE",
CASE WHEN ACTIVITY = 'out' THEN IP_OUT END "MAAX_IP_OUT",
MAX(CASE WHEN ACTIVITY = 'out' THEN A_DATE END) OVER(Partition By A_NAME, IP) "OUT_DATE"
From
tbl
A_NAME IP A_SESSION MAX_IP_IN IN_DATE MAAX_IP_OUT OUT_DATE
------ ---------- ---------- ---------- --------- ----------- ---------
X 123 1 123 09-FEB-23 09-FEB-23
X 123 1 09-FEB-23 123 09-FEB-23
X 163 3 08-FEB-23 163 08-FEB-23
X 163 3 163 08-FEB-23 08-FEB-23
Y 143 2 143 08-FEB-23
Y 153 2 153 08-FEB-23
Option 4 - analytic
Select
A_NAME, IP, A_SESSION,
CASE WHEN ACTIVITY = 'in' THEN IP_IN END "MAX_IP_IN",
MAX(CASE WHEN ACTIVITY = 'in' THEN A_DATE END) OVER(Partition By A_NAME, IP, ACTIVITY) "IN_DATE",
CASE WHEN ACTIVITY = 'out' THEN IP_OUT END "MAAX_IP_OUT",
MAX(CASE WHEN ACTIVITY = 'out' THEN A_DATE END) OVER(Partition By A_NAME, IP, ACTIVITY) "OUT_DATE"
From
tbl
A_NAME IP A_SESSION MAX_IP_IN IN_DATE MAAX_IP_OUT OUT_DATE
------ ---------- ---------- ---------- --------- ----------- ---------
X 123 1 123 09-FEB-23
X 123 1 123 09-FEB-23
X 163 3 163 08-FEB-23
X 163 3 163 08-FEB-23
Y 143 2 143 08-FEB-23
Y 153 2 153 08-FEB-23
... and so on... using (maybe) different functions not just MAX() (aggregate or analytic) with different Group By / Partition By