如何获取每个用户最后一次出现的城市信息

2019-10-18 14:15:42 +08:00
 Paual

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

我现在的想法是:按照时间倒序排序,进行判断,设置一个集合进行判断,如果用户已经获取过当前城市信息的话就不获取,没有获取过的话就获取

不知道大家有没有什么更好的方法解决

4371 次点击
所在节点    MySQL
11 条回复
imn1
2019-10-18 14:31:02 +08:00
groupby name + max(login_time)
Paual
2019-10-18 14:35:13 +08:00
@imn1 使用 max(login_time)的话获取的是最大的登录时间,没有获取到 current_city 信息的吧
imn1
2019-10-18 14:40:31 +08:00
@Paual
我回复的是提示,不是详细完整的 sql 语句
怎样写详细完整的语句那是你的工作
Kavcc
2019-10-18 14:48:38 +08:00
SELECT * FROM `login` GROUP BY `name` having max(login_time)
ho121
2019-10-18 14:49:25 +08:00
倒序取第一个
yinzhili
2019-10-18 14:49:44 +08:00
select name,current_city from table where id in
(
select max(id) from table
group by name
)
Paual
2019-10-18 14:55:43 +08:00
@Kavcc having max_login_time 的话还是没有涉及到 current_city 信息,看到可以实现的了,是需要用子查询的,6 楼的也可以看一下哈,还是谢谢了
Paual
2019-10-18 14:56:37 +08:00
@yinzhili 谢谢了,一开始想到用子查询了,后来没有想要 max() 方法,3q~
taotaodaddy
2019-10-18 15:00:37 +08:00
我设计的表结构喜欢有一个表,该表每个用户一条数据摘要,每次出现在一个城市时多做一个 update,查询最后一次城市只要简单按 id 做 select 即可,这个摘要一般放较热业务数据
Paual
2019-10-18 15:14:06 +08:00
@taotaodaddy 嗯嗯,是哒,热数据的话是在表里面更新是最好的,使用的时候,如果量比较多的话还可以从缓存中获取,我这个业务场景是分析的日志信息,也就是打点的 log,所以可能会有多个城市信息
Aresxue
2019-10-19 12:41:13 +08:00
先 groupname 获取最大时间,再拿时间去匹配

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/610652

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX