V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yunshui
V2EX  ›  程序员

请教下 mysql 的问题

  •  2
     
  •   yunshui · 2019-09-04 20:49:53 +08:00 · 1636 次点击
    这是一个创建于 1688 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问下取一周来过三次的用户应该怎么取 应该怎么写

    9 条回复    2019-09-05 09:09:20 +08:00
    yunshui
        1
    yunshui  
    OP
       2019-09-04 21:31:59 +08:00
    表名:user_id, time, event

    每个 id 一天同个 event 会有多个 time,我现在想要一周内来了两天以上的 id
    Joshua999
        2
    Joshua999  
       2019-09-04 21:46:12 +08:00 via Android
    count
    luopengfei14
        3
    luopengfei14  
       2019-09-04 22:00:52 +08:00 via iPhone
    将时间转换为天的字符串,然后对 ID,天进行分组… …
    大概思路是这样
    romisanic
        4
    romisanic  
       2019-09-04 22:08:14 +08:00
    请先给个表结构并定义什么是"来过一次"
    dallaslu
        5
    dallaslu  
       2019-09-04 22:13:33 +08:00
    记录每次登录事件,然后统计指定时间内的登录次数。或者增加一个 meet_times_this_week,每次登录 +1,每周清零。
    doublie
        6
    doublie  
       2019-09-04 23:48:14 +08:00 via iPhone
    还不知道表结构是怎么样的!不过我觉得 group by id 应该适合你,你的一周这个范围就不知道了,不知道是最近的一周还是固定的一周
    chestre
        7
    chestre  
       2019-09-05 00:13:05 +08:00
    假设:
    1,时间格式是 "yyyy-MM-dd", 可使用内置函数例如 DAY() 获得日期( day )
    2,登录 event is ‘ login ’

    SELECT user_id
    FROM UserEvent
    WHERE event='login'
    GROUP BY user_id, Day(time)
    HAVING count(*)>=3
    chestre
        8
    chestre  
       2019-09-05 00:13:53 +08:00
    @yunshui 忘记 Where 里面要加上一周的 condition
    ColoThor
        9
    ColoThor  
       2019-09-05 09:09:20 +08:00
    时间不要用内置函数,会使索引失效。比如字段是 login_time,那就 login_time >= 'yyyy-MM-dd 00:00:00' and login_time <= 'yyyy-MM-dd 23:59:59'
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5756 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:13 · PVG 10:13 · LAX 19:13 · JFK 22:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.