无敌小贱 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 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办