一个页面统计表,里面数据为:
id      curdate                  ip              pageid  views   click 
1 2009-05-21 11:49:53 127.0.0.1 1 12 10
2 2009-05-21 11:49:56 127.0.0.1 2 10 20
3 2009-05-21 11:51:53 127.0.0.1 5 13 12
4 2009-05-22 11:51:53 127.0.0.1 3 13 12
5 2009-05-22 11:51:53 127.0.0.1 3 14 21
6 2009-05-22 11:51:53 127.0.0.1 5 14 14我要把它按天查出来,获取从当天后推的31天数据(最近一个月统计),想得到的结果如:
2009-05-21  浏览量XXX 点击量XXX
2009-05-22  浏览量XXX 点击量XXX
2009-05-23  浏览量XXX 点击量XXX不知用什么方法比较高效率,数据量较大,每天插入几千条记录mysql版本5.027

解决方案 »

  1.   

    SELECT 
        DATE(curdate) AS `date`,
        SUM(views) AS 浏览量,
        SUM(click) AS 点击量
    FROM tb
    WHERE curdate BETWEEN CURDATE() AND DATE_ADD(CURDATE(),INTERVAL 31 DAY)
    GROUP BY DATE(curdate);
      

  2.   

    -- 查本月的SELECT 
        DATE(curdate) AS `date`,
        SUM(views) AS 浏览量,
        SUM(click) AS 点击量
    FROM tb
    WHERE curdate BETWEEN DATE_ADD(CURDATE(),INTERVAL -DAY(CURDATE())+1 DAY) 
               AND LAST_DAY(CURDATE())
    GROUP BY DATE(curdate);
      

  3.   

    to 楼主,按一楼方法就行。 数量多的话,在 curdate 上加个索引。
      

  4.   


    嗯.是啊..最近来的时间比预期少得多..主要是最近要学的东西比较多..时间少了..
    而且呆在 SQL Server版多..每次打开MySQL版都没什么问题,,
    而且基本被你和WWWWWA回复了..
      

  5.   

    谢谢二位,我刚用2楼的方法试了下,并没有达到想要的效果,测试表里有三天的数据,用2楼的方法只显示了5.22一天的,我更正一下要求说明,并把日期字段改个名,请再帮我看一下一个页面统计表,里面数据为: 表名:adstat,然后需加多个条件,就是pageid=xxx,就说查这个页面ID的最近一个月的统计,id      pcurdate                  ip        pageid  views  click 
    1       2009-05-21 11:49:53     127.0.0.1   1       12     10 
    2       2009-05-21 11:49:56     127.0.0.1   2       10     20 
    3       2009-05-21 11:51:53     127.0.0.1   5       13     12 
    4       2009-05-22 11:51:53     127.0.0.1   3       13     12 
    5       2009-05-22 11:51:53     127.0.0.1   3       14     21 
    6       2009-05-22 11:51:53     127.0.0.1   5       14     14 我要把它按天查出来,获取从该条件所产生的日期后推的31天数据(最近一个月统计),比方说它仅到5.10就没记录了,那就是5.10往后通的31天数据.想得到的结果如: 
    日期          浏览量  点击量
    2009-05-23  XXX    XXX 
    2009-05-22  XXX    XXX 
    2009-05-21  XXX    XXX 
    一直向后推31天,无数据也显示满31天.....请指点,谢谢!
      

  6.   


    这样最好有一个日历表,否则你需要UNION31次得到一个日期表太麻烦了。
      

  7.   


    这项做不到不要紧,我在PHP里虚似补足也可以,最重要是能一条sql能把已有的日期数据排出来,有劳.
      

  8.   

    在一楼的基础上稍微改了一下,加了个减号。SELECT 
        DATE(curdate) AS `date`,
        SUM(views) AS 浏览量,
        SUM(click) AS 点击量
    FROM tb
    WHERE curdate BETWEEN CURDATE() AND DATE_ADD(CURDATE(),INTERVAL -31 DAY)
    GROUP BY DATE(curdate);