如何在MySQL中每周分组数据?

时间:2015-08-21 17:58:56

标签: mysql sql group-by

id     modid    userid  timemodified FROM_UNIXTIME(timemodified,'%d-%m-%Y')     
410     32       46      1438971403     03-08-2015
411     32       46      1438971403     03-08-2015
412     66       977     1438971403     07-08-2015
412     66       977     1438971403     07-08-2015
413     67       34      1438971423     07-08-2015
414     68       16      1438971424     07-08-2015
415     132      23      1438972154     07-08-2015
416     134       2      1438972465     08-08-2015
417     115       2      1438996430     08-08-2015
418     130      977     1438996869     08-08-2015

通过从今天的日期开始计算,我从过去4周前的框架中得到了这个查询。现在,我想单独向用户展示4周,如第1周,第2周,第3周和第3周。第4周,无论是列式还是行式,都是最好的。

In detailed, from the above query, I need to separate data from week1 to week4,like

              Week4 : No user
              Week3 : 2 users (2,977)
              Week2 : 4 users (16, 23, 34, 977)
              Week1 : 1 user (46)

 SET @unix_four_weeks_ago = UNIX_TIMESTAMP(curdate()) - 2419200;  

 SELECT *,FROM_UNIXTIME(timemodified,'%d-%m-%Y') FROM mod_users WHERE timemodified >= @unix_four_weeks_ago 

1 个答案:

答案 0 :(得分:0)

我的猜测是,您希望根据timemodified列分割每周的用户数。我会使用WEEK()函数来做到这一点。

以下SQL将添加weeknumber列以标识周编号:

SELECT WEEK(timemodified) weeknumber, dates.* 
FROM dates

然后,如果您想获得不同的用户数,可以使用以下SQL:

SELECT WEEK(timemodified) weeknumber, COUNT(DISTINCT(userid)) users_count
FROM dates
GROUP BY weeknumber

您还可以添加WHERE子句,以便只根据需要获得特定周数。因此,为了从2015年8月23日开始的最后4周,我会这样做:

SELECT WEEK(timemodified) weeknumber, COUNT(DISTINCT(userid)) users_count
FROM dates
WHERE WEEK(timemodified) <= WEEK('2015-08-23') 
    AND WEEK(timemodified) > (WEEK('2015-08-23') - 4)
GROUP BY weeknumber

我希望我的假设是正确的。 : - )