如何使用SQL查询获取过去四周,包括当前周

时间:2012-05-04 12:23:34

标签: php mysql

我想获取包括本周在内的过去4周的结果。所以,假设我有一个统计表,其中充满了上个月4月的统计数据,现在是5月4日...当我写这个查询时: 我想要获取唯一身份访问者:

 SELECT COUNT(distinct ip ) AS uni, (
date_added
) AS wday, FROM_UNIXTIME( date_added ) AS cusotms
FROM  `site_stats` 
WHERE FROM_UNIXTIME( date_added ) >= DATE_SUB( SYSDATE( ) , INTERVAL 4 WEEK ) 
GROUP BY WEEK( FROM_UNIXTIME( date_added ) ) 

它找到了以下结果:

uni     wday        cusotms
2   1333819740  2012-04-07 22:29:00
6   1333906140  2012-04-08 22:29:00
7   1334510940  2012-04-15 22:29:00
7   1335115740  2012-04-22 22:29:00
5   1336089600  2012-05-04 05:00:00

但是我想要在本周持续4周。我不知道为什么这会显示我4月5日,4月22日,4月15日以及4月8日和7日的记录。我在想下面的事情

这是一周一周的最后4周的正确结果吗?我认为它应该像4月5日那样,

4 may
4-7 = 28 april
4-14days = 21 april
and then 14 april
and last 7 april
??

我需要将此输出放在图表中以显示上周的统计数据......任何帮助都会非常感激。

提前致谢!

2 个答案:

答案 0 :(得分:0)

你获取确切的日期,好像你想要获取一周:

SELECT COUNT(distinct ip ) AS uni, (
date_added
) AS wday, WEEK( FROM_UNIXTIME( date_added ) ) AS cusotms

答案 1 :(得分:0)

以下是解决方案:

SELECT COUNT( DISTINCT ip ) AS uni, ( 
    date_added
    ) AS wday, FROM_UNIXTIME( date_added ) AS cusotms
    FROM `site_stats` 
    WHERE FROM_UNIXTIME( date_added ) >= CURDATE( ) - INTERVAL DAYOFWEEK( CURDATE( ) ) -3WEEK
    GROUP BY WEEK( FROM_UNIXTIME( date_added ) ) 
    LIMIT 0 , 30

希望它有所帮助:)