-- 方法一
select user.name as u_n, client.name as c_n,
login.date
from login 
join user on login.user_id=user.id
join client on login.client_id=client.id
where (login.user_id,login.date) in
(select user_id,max(date) from login group by login.user_id )
order by user.name;

-- 方法二
select u.name, c.name, d 
from login as l
left outer join 
client as c on c.id = l.client_id
left outer join 
user as u on u.id = l.user_id
right outer join 
(select user_id , max(date) as d from login group by user_id ) as a
on a.user_id = l.user_id
and a.d = l.date
order by u.name;

两个方法都可以,同时都给予我一些新的思路。

方法一:第一次得知,原来where子句可以同时过滤两个条件,甚至多个条件,只要在()中一一对齐就好。

方法二:在同时联结多个表格时,on子句要紧跟在每一个联结语句之后,而不是一起写在最后。