此处第一次尝试的时候没有 WHERE 语句,结果是对于u.name,c.name 双重分组因此会出现一个人不同设备的最新登录记录,因此无法一步到位,只能提前将 个人的最新登录找出来;
- 1.由于拆解思路发现其实其他两张表只是在对于login 的信息补充;
- 2.因此 通过查找 所需要的(user_id,date)
-
- 然后通过join 补充相关信息即可
# SELECT * FROM login
# WHERE (user_id,date) in (SELECT user_id,MAX(date) FROM login GROUP BY user_id)
SELECT u.name as u_n ,c.name as c_n,MAX(date)
FROM login l
join user u on l.user_id=u.id
join client c on l.client_id=c.id
WHERE (l.user_id,l.date) in (SELECT user_id,MAX(date) FROM login GROUP BY user_id)
GROUP BY u.name,c.name
ORDER BY u.name
别人的 好思路
又是自联结,自联结的知识点总是有缺失 ,表连接 可以用自联结改写达到相同的效果,而且尤其是在比较和极值的时候自联结很好用
# select u.name,c.name,l1.date
# from login l1,user u,client c
# where l1.date=(select max(l2.date) from login l2 where l1.user_id=l2.user_id)
# and l1.user_id=u.id
# and l1.client_id=c.id
# order by u.name



京公网安备 11010502036488号