id name current_city login_time
8 用户 A 上海 2019-10-18 10:00:00
7 用户 A 北京 2019-10-18 09:00:00
6 用户 B 杭州 2019-10-18 08:00:00
5 用户 A 天津 2019-10-18 07:00:00
4 用户 B 江苏 2019-10-18 06:00:00
3 用户 C 郑州 2019-10-18 05:00:00
2 用户 B 南京 2019-10-18 04:00:00
1 用户 C 深圳 2019-10-18 03:00:00
mysql 数据如上所示:
请教:如何获取每个用户最后一次出现的城市信息
结果:
id name current_city login_time
8 用户 A 上海 2019-10-18 10:00:00
6 用户 B 杭州 2019-10-18 08:00:00
3 用户 C 郑州 2019-10-18 05:00:00
我现在的想法是:按照时间倒序排序,进行判断,设置一个集合进行判断,如果用户已经获取过当前城市信息的话就不获取,没有获取过的话就获取
不知道大家有没有什么更好的方法解决
1
imn1 2019-10-18 14:31:02 +08:00
groupby name + max(login_time)
|
4
Kavcc 2019-10-18 14:48:38 +08:00 1
SELECT * FROM `login` GROUP BY `name` having max(login_time)
|
5
ho121 2019-10-18 14:49:25 +08:00 via Android
倒序取第一个
|
6
yinzhili 2019-10-18 14:49:44 +08:00 1
select name,current_city from table where id in
( select max(id) from table group by name ) |
7
Paual OP @Kavcc having max_login_time 的话还是没有涉及到 current_city 信息,看到可以实现的了,是需要用子查询的,6 楼的也可以看一下哈,还是谢谢了
|
9
taotaodaddy 2019-10-18 15:00:37 +08:00 via Android
我设计的表结构喜欢有一个表,该表每个用户一条数据摘要,每次出现在一个城市时多做一个 update,查询最后一次城市只要简单按 id 做 select 即可,这个摘要一般放较热业务数据
|
10
Paual OP @taotaodaddy 嗯嗯,是哒,热数据的话是在表里面更新是最好的,使用的时候,如果量比较多的话还可以从缓存中获取,我这个业务场景是分析的日志信息,也就是打点的 log,所以可能会有多个城市信息
|
11
Aresxue 2019-10-19 12:41:13 +08:00
先 groupname 获取最大时间,再拿时间去匹配
|