将月分成几周并使用GROUP BY

时间:2015-11-19 08:51:26

标签: php mysql date datetime

这是一个我无法在任何地方找到答案的问题。好的。这里是。 我有两个日期范围(本月和上个月)

上个月 - 2015年1月1日(2015年1月1日)至2015年1月31日 本月 - 2015年2月1日(2015年2月1日)至2015年2月28日

现在,每个月都有几个星期。我有一个包含created_at列的表。我希望每周将所有记录提取到一个数组(绘制图表)及其相应的总和(值)或计数(值)。

所以它会是这样的: 上个月: 第1周 - 25周 第2周--34 等

本月: 第1周:55 第2周:56 等

日期的格式为created_at:2015-07-21 01:27:14(Y-m-d H:i:s)

3 个答案:

答案 0 :(得分:1)

MySql中您可以使用WEEK()获取周数(从1到53)

O你可以在星期一的第二个星期日使用WEEKDAY()DAYOFWEEK()。{/ p>

您可以将GROUP BYHAVING

一起使用

类似的东西:

SELECT count(*)
FROM `YourTable` 
WHERE `created_at` >= '2015-10-01' AND `created_at`< '2015-11-01'
GROUP BY WEEK(`created_at`)

要使用您找到的解决方法,您需要执行类似的操作:

创建一个名为“numbers”的表,其中包含字段“id”(自动增量)和31行(一个月中每天一个)

然后使用如下查询:

SELECT count(i.created_at)
FROM
(SELECT DATE_FORMAT(DATE_ADD('2015-12-01', INTERVAL -n.id DAY), '%Y-%m-%d') AS AllDays
             FROM numbers n) AS DaysOfMonth
Left Join
YourTableName i
ON STR_TO_DATE(i.created_at, '%Y-%m-%d') = DaysOfMonth.AllDays
GROUP BY WEEK(AllDays)

(尝试根据您的需要调整)

答案 1 :(得分:1)

您需要做的是按周分组,然后对值进行求和。这是一个如何运作的简单示例:

SELECT DATE_FORMAT(created_at,'%Y-%V') as interval, SUM(units_sold) as total_sold
FROM sales 
GROUP BY DATE_FORMAT(created_at,'%Y-%V')

你将得到的是蚂蚁周数(例如2015-50)以及该时间间隔的总和。

这样的表:

+----+------------+---------------------+
| id | units_sold |     created_at      |
+----+------------+---------------------+
|  1 |          2 | 2015-01-01 09:00:00 |
|  2 |          4 | 2015-01-04 10:00:00 |
|  3 |          1 | 2015-01-12 12:00:00 |
|  4 |          4 | 2015-01-16 13:00:00 |
+----+------------+---------------------+

会导致:

+----------+------------+
| interval | total_sold |
+----------+------------+
| 2015-01  |          6 |
| 2015-03  |          5 |
+----------+------------+

答案 2 :(得分:0)

我觉得它对你有用......

SELECT GROUP_CONCAT(id), COUNT(id) AS idcount,SUM(id) AS idsum,
MONTHNAME(order_created_date) AS month_name, WEEK(order_created_date) 
AS weeks  FROM orders GROUP BY WEEK(order_created_date)