我尝试从当月开始按 3 个月的时间段对结果进行分组,如下所示:
row1 15 -- This should contain November, September and October
row2 25 -- This should contain August, July and June
row3 5 -- This should contain May, April and March
row4 2 -- This is should contain February and Janvier
我不知道如何实现这一点。有什么帮助吗?
到目前为止我可以按月分组:
SELECT MONTH(date), MONTHNAME(date) as month, COUNT(*) FROM table_name WHERE MONTH(date) < NOW() GROUP BY MONTH(date) ORDER BY MONTH(date) DESC
Thanks
您可以使用PERIOD_DIFF http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_period-diff和一些数学来查找记录。
-- This line creates YYYYMM representation of today; you can use PHP instead
SET @T1 = DATE_FORMAT(CURRENT_DATE, '%Y%m');
SELECT MIN(`date`) AS `Range Start`, MAX(`date`) AS `Range End`, COUNT(*) AS `Count`
FROM `table`
GROUP BY FLOOR(PERIOD_DIFF(@T1, DATE_FORMAT(`date`, '%Y%m')) / 3)
ORDER BY 1 DESC
示例输出:
Range Start Range End Count
----------- ---------- -----
2013-09-01 2013-11-26 87
2013-06-01 2013-08-31 92
2013-03-01 2013-05-31 92
2012-12-01 2013-02-28 90
2012-09-01 2012-11-30 91
PERIOD_DIFF
返回周期 P1 和 P2 之间的月数(两个参数都是 YYYYMM 格式的字符串)。
在上面的查询中,我们计算每行的月份差异(例如 NOV-2013 是 0,OCT-2013 是 1,SEP-2013 是 2,AUG-2013 是 3 等等)。
差值除以 3 加FLOOR
生成季度数(NOV-2013 为 0.00 -> 0,OCT-2013 为 0.33 -> 0,SEP-2013 为 0.66 -> 0,AUG-2013 为 1.00 -> 1,依此类推)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)