sql select only the last record for multiple values
-
18-01-2021 - |
Question
I have a table called "sessions" with say 4 columns like below
id name s_time f_time
01 abc 10.15 10.45
02 abc 11.05 11.55
03 abc 12.18 13.46
04 abc 15.12 16.53
05 def 10.01 12.58
06 def 14.06 16.51
07 def 17.43 18.54
08 xyz 09.45 12.36
09 xyz 14.51 15.57
10 xyz 16.23 18.01
How can i get the last f_time for each name ?
What i need is
name f_time
abc 16.53
def 18.54
xyz 18.01
What am trying is this, but am only getting the finish time for the first name.
select name,f_time from sessions where name in ('abc','def','xyz') order by id DESC LIMIT 1;
MariaDB 10.1.37
Solution
give your example data this should do it.
SELECT name, max(f_time) AS f_time
FROM sessions
WHERE name IN ('abc','def','xyz')
GROUP BY name
ORDER BY name;
If you need to pick the f_time
according to some other column it gets messy.
In Postgresql you can use the distinct on
SQL extension.
SELECT DISTNICT ON (name)
name, f_time
FROM sessions
WHERE name IN ('abc','def','xyz')
ORDER BY name, id desc;
i think there's also a way using window functions
OTHER TIPS
You can use this code to select last record of table.
SELECT name, max(f_time) AS f_time FROM sessions GROUP BY name ORDER BY name;
Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange