【问题标题】:How to group data per week in MySQL?如何在 MySQL 中每周对数据进行分组?
【发布时间】:2015-11-15 18:28:59
【问题描述】:
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 周和第 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 

【问题讨论】:

  • 您的问题对您来说可能很明显,但我真的不知道您要在这里完成什么。你能把它分解得更多吗?解释情况以及这些数据是什么。
  • Maxime - 我需要将第 1 周到第 4 周的数据分开。
  • 03/08 和 08/08 之间只有 5 天。您的数据怎么会分成 3 周?

标签: mysql sql group-by


【解决方案1】:

我的猜测是您想根据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

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

【讨论】:

  • Maxime - 我没有得到它显示为 NULL 的周数
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 2021-12-29
  • 2012-03-18
  • 2022-01-09
  • 2020-09-21
  • 2011-05-26
  • 2020-05-15
相关资源
最近更新 更多