当前位置: 代码迷 >> J2EE >> 按日期分组统计用户数,该怎么处理
  详细解决方案

按日期分组统计用户数,该怎么处理

热度:47   发布时间:2016-04-22 00:33:02.0
按日期分组统计用户数
如图表:
id username loginip logintime
117 zhangsan 127.0.0.1 2012-10-08 14:42:09
116 testaaa 127.0.0.2 2012-10-08 11:41:30
115 zhangsan 127.0.0.1 2012-10-08 10:32:34
114 wangwu 127.0.0.3 2012-09-29 15:37:34
113 wangwu 127.0.0.3 2012-09-29 15:34:29

如何统计结果为:
日期 用户数 登录次数
date totalUser totalLogin 
2012-10-08 2 3 
2012-09-29 1 2

目前我统计登录次数是用的SQL
SELECT DATE_FORMAT(a.loginTime,'%Y-%c-%d') logindate,COUNT(a.username) FROM g_user_login_log a GROUP BY logindate ORDER BY a.loginTime
用户数好像要group by userid了,这样就涉及到转向,比较麻烦。。有没有比较简洁的统计语句。。

------解决方案--------------------
试试看这样:
SQL code
SELECT b.logindate, count(b.username) totalUser, sum(b.num) totalLoginFROM (  SELECT DATE_FORMAT(a.loginTime,'%Y-%c-%d') logindate,       username, COUNT(a.username) num   FROM g_user_login_log a   GROUP BY logindate, username) bGROUP BY b.logindate
------解决方案--------------------
查询慢是必然的,因为你这个查询,根本没法用索引,整个过程全都是全表扫描,而且是两轮全表扫描:第一轮是g_user_login_log,第二轮是临时表b。

查不到当月记录这个就显得比较怪异了,似乎没啥道理,或者日期存在问题?
------解决方案--------------------
SQL code
 SELECT a.logindate,b.totalUser ,a.totalLogin  FROM   (SELECT DATE_FORMAT(a.loginTime,'%Y-%c-%d') logindate,        COUNT(a.username)  totalLogin    FROM g_user_login_log a   GROUP BY logindate )a,(SELECT DATE_FORMAT(a.loginTime,'%Y-%c-%d') logindate,        COUNT(a.username)  totalUser   FROM g_user_login_log a   GROUP BY logindate ,username)b where a.logindate=b.logindate
  相关解决方案