无敌小贱 2013-04-27 19:40 采纳率: 0%
浏览 256
已采纳

mysql查询错误

select count(playerId) from log_login where week(loginTime)=week(NOW()) and week(loginTime)=week(NOW())-2;

这是要查前两个星期登录过的人在这个星期也登录了的人数,loginTime是登录时间,但是查出来就0。我看数据明明有的,有个人告诉我说不能用and .但是我想不出来别的拼接条件的单词了。union肯定不对。每登录一次就会插入一条这样的数据,所以不用想数据库结构,就这一个Login表。大神们来帮帮我啊
另外还有一个条件,就是上周没登陆。
也就是上上周登录的人,上周没登录,但是在本周登录了。这样一个人的个数。
我快纠结死了。
select count(a.playerId) from log_login a inner join log_login b on b.playerId=a.playerId where week(a.loginTime)=week(NOW()) and week(b.loginTime)=week(NOW())-2
这个貌似是对的,但是没加上‘上周没登录’这个条件。!!出不来不让下班啊。我刚入手mysql

  • 写回答

2条回答 默认 最新

  • jinnianshilongnian 2013-04-27 20:04
    关注

    这是要查前两个星期登录过的人在这个星期也登录了的人数
    //建议对week(loginTime)建立索引
    select count(distinct playerId) from log_login l1 where week(loginTime)=week(NOW()) and exists(select 1 from log_login l2 where l1.id = l2.id and week(loginTime)=week(NOW() -1) or week(loginTime)=week(NOW() -2))

    (这里有一个问题 就是如果记录前N年的 可能重复 也是有问题的 所以也不太精确)

    不太精确 但高效的做法 还走索引
    select count(distinct playerId) from log_login l1 where loginTime >= date_sub(now, interval 2 week) and exists(select 1 from log_login l2 where l1.id = l2.id and loginTime >= date_sub(now, interval 1 week));

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器