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

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

现在,每个月都有几个星期。我有一个带有created_at列的表。我想每周将所有记录取入具有相应的sum(value)或count(value)的数组(以绘制图形)。

因此它将是这样的:
上个月:
第1-25周
第二周-34
等等

这个月:
第一周:55
第二周:56
等等

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

最佳答案

MySql中,您可以使用WEEK()来获取星期数(从1到53)

O,您可以在星期一的第二个星期日使用WEEKDAY()DAYOFWEEK()第一个Bigins。

您可以将它们与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)


(尝试使其适应您的需求)

关于php - 将月份分成几周并使用GROUP BY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33799083/

10-11 03:06
查看更多