数据库为mysql
user表中有login_time字段
login_time字段数据类型为bigint,格式为:yyyyMMddHHmmss,例如20100315191056表示2010-03-15 19:10:56
不知道当初设计者为什么要设计成这样。
1、统计每天注册用户数和每月注册用户数
2、查询条件都为起始时间(startDate)和结束时间(endDate)
3、当某天或某月无记录时,查询结果也应该有相应记录,数量为0
我现在统计每天的sql是:select count(*) as amount, round(u.login_time/1000000) as date 
from user u 
where u.login_time >= startDate and u.login_time <endDate
group by u.login_time这样的问题是,某天没有用户注册的话,那查询结果中就没那天的记录。
那位帮忙写下按天和按月统计的两个sql语句!?

解决方案 »

  1.   

    1、统计每天注册用户数和每月注册用户数
    select login_time/1000000 as 每天,count(*)
    from user
    group by login_time/1000000select login_time/100000000 as 每月,count(*)
    from user
    group by login_time/100000000
      

  2.   

    2、查询条件都为起始时间(startDate)和结束时间(endDate)select login_time/100000000 as 每月,count(*)
    from user
    where login_time between 20100315191056 and 20100415191056
    group by login_time/100000000
      

  3.   

    3、当某天或某月无记录时,查询结果也应该有相应记录,数量为0需要一个日历表,calendar (cdate bigint primary key),其中放置全年所有日期,然后做 left join 查询
      

  4.   

    MYSQL目前不支持递归查询,只有这样了