这是一个我无法在任何地方找到答案的问题。好的。这里是。 我有两个日期范围(本月和上个月)
上个月 - 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)
答案 0 :(得分:1)
在MySql
中您可以使用WEEK()
获取周数(从1到53)
O你可以在星期一的第二个星期日使用WEEKDAY()
或DAYOFWEEK()
。{/ p>
您可以将GROUP BY
与HAVING
类似的东西:
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)