› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
Paual
V2EX  ›  MySQL

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

  •  
  •   Paual ·
    zhangpengfeiup · Oct 18, 2019 · 5531 views
    This topic created in 2541 days ago, the information mentioned may be changed or developed.

    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
    

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

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

    11 replies  •  2019-10-19 12:41:13 +08:00
    imn1
        1
    imn1  
       Oct 18, 2019
    groupby name + max(login_time)
    Paual
        2
    Paual  
    OP
       Oct 18, 2019
    @imn1 使用 max(login_time)的话获取的是最大的登录时间,没有获取到 current_city 信息的吧
    imn1
        3
    imn1  
       Oct 18, 2019
    @Paual
    我回复的是提示,不是详细完整的 sql 语句
    怎样写详细完整的语句那是你的工作
    Kavcc
        4
    Kavcc  
       Oct 18, 2019   ❤️ 1
    SELECT * FROM `login` GROUP BY `name` having max(login_time)
    ho121
        5
    ho121  
       Oct 18, 2019 via Android
    倒序取第一个
    yinzhili
        6
    yinzhili  
       Oct 18, 2019   ❤️ 1
    select name,current_city from table where id in
    (
    select max(id) from table
    group by name
    )
    Paual
        7
    Paual  
    OP
       Oct 18, 2019
    @Kavcc having max_login_time 的话还是没有涉及到 current_city 信息,看到可以实现的了,是需要用子查询的,6 楼的也可以看一下哈,还是谢谢了
    Paual
        8
    Paual  
    OP
       Oct 18, 2019
    @yinzhili 谢谢了,一开始想到用子查询了,后来没有想要 max() 方法,3q~
    taotaodaddy
        9
    taotaodaddy  
       Oct 18, 2019 via Android
    我设计的表结构喜欢有一个表,该表每个用户一条数据摘要,每次出现在一个城市时多做一个 update,查询最后一次城市只要简单按 id 做 select 即可,这个摘要一般放较热业务数据
    Paual
        10
    Paual  
    OP
       Oct 18, 2019
    @taotaodaddy 嗯嗯,是哒,热数据的话是在表里面更新是最好的,使用的时候,如果量比较多的话还可以从缓存中获取,我这个业务场景是分析的日志信息,也就是打点的 log,所以可能会有多个城市信息
    Aresxue
        11
    Aresxue  
       Oct 19, 2019
    先 groupname 获取最大时间,再拿时间去匹配
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2317 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 06:47 · PVG 14:47 · LAX 23:47 · JFK 02:47
    ♥ Do have faith in what you're doing.