I have few tables as below. And, I need to fetch the records on the basis of each maximum level and latest level (ordered by date) for each ID
and Type
column. I'm using SQL Server to run the query. So far, I have tried the following SQL query:
select f.ID,x.MAX_LEVEL,f.TYPE, f.DATE
from (
select ID
,TYPE
, MAX(LEVEL) as MAX_LEVEL
from TABLEA
GROUP BY ID, TYPE
) as x
,
(
select ID
,TYPE
, MAX(DATE) as MAX_DATETIME
from TABLEA
GROUP BY ID, TYPE
) as y
inner join TABLEA as f
on f.ID = x.ID and f.LEVEL = x.MAX_LEVEL
inner join TABLEA as g
on f.ID = y.ID and g.DATE = y.MAX_DATETIME
and f.DATE > DATEADD(day, -1, GETDATE())
TABLEA
ID TYPE LEVEL DATE
1 ELECTRIC 2 01/06/2019
1 GAS 2 01/06/2019
2 ELECTRIC 2 01/06/2019
3 ELECTRIC 3 01/06/2019
3 ELECTRIC 3 01/06/2019
1 GAS 3 05/06/2019
1 GAS 5 13/06/2019
2 ELECTRIC 5 07/06/2019
3 GAS 5 08/06/2019
6 ELECTRIC 3 02/06/2019
2 ELECTRIC 3 04/06/2019
3 ELECTRIC 3 05/06/2019
2 GAS 10 06/06/2019
2 GAS 3 11/06/2019
3 ELECTRIC 3 11/06/2019
1 ELECTRIC 5 01/06/2019
1 GAS 3 02/06/2019
6 ELECTRIC 5 01/06/2019
1 ELECTRIC 5 10/06/2019
Expected Result:
ID TYPE MAX_LEVEL LATEST_LEVEL
1 ELECTRIC 5 5
1 GAS 5 3
2 ELECTRIC 5 5
2 GAS 10 3
3 ELECTRIC 3 3
3 GAS 5 5
6 ELECTRIC 5 3
Any thoughts, how could I achieve this?