0

I have a table that looks like this:

date account asset amount
01-01-2022 1 A 12
01-01-2022 1 B 100
02-01-2022 1 A 14
02-01-2022 1 B 98
01-01-2022 2 A 15
01-01-2022 2 C 230
02-01-2022 2 A 13
02-01-2022 2 B 223
03-01-2022 2 A 17
03-01-2022 2 B 237

I want to be able to get the last values (i.e. max date) for each account. So the result should look like this:

date account asset amount
02-01-2022 1 A 14
02-01-2022 1 B 98
03-01-2022 2 A 17
03-01-2022 2 B 237

How can this be done in SQL?

EDIT: Notice that the max dates for the different accounts are not the same.

lemon
  • 14,875
  • 6
  • 18
  • 38
MathMan 99
  • 665
  • 1
  • 7
  • 19

1 Answers1

2

You can do it by first selecting the max dates for each account and then forcing the match between accounts given the date constraints, like in the following query:

SELECT 
    *
FROM 
    (
    SELECT 
        MAX(date) AS date, 
        account
    FROM 
        tab 
    GROUP BY 
        account
    ) max_date_per_account
INNER JOIN 
    tab
ON 
    tab.date = max_date_per_account.date 
AND  
    tab.account = max_date_per_account.account
lemon
  • 14,875
  • 6
  • 18
  • 38