我希望从表中获取所有行
where date >='2012-05-05' and date<='2012-07-20'
我希望MySQL从
增加明确递增"group by"
行
2012-05-05 to 2012-06-05(incerement 1 month)
2012-06-06 to 2012-07-06(increment 1` month)
and remaining 2012-07-07 to 2012-07-20 (group the remaining 14 days)
如何编写查询以实现相同的目标?
谢谢...
答案 0 :(得分:5)
试试这个解决方案:
您可以通过TIMESTAMPDIFF()函数GROUP BY
从参数最小值(2012-05-05
)+ 1到每行的日期经过的月数:
GROUP BY TIMESTAMPDIFF(MONTH, '2012-05-05' + INTERVAL 1 DAY, date)
我们为您的最小参数+1天的原因是:
2012-05-05
至2012-06-04
为0个月,但是...... 2012-05-05
至2012-06-05
为1个月 ^因此,2012-06-05
上的行将与我们实际希望将它们分组的0个月后的日期分开分组。
编辑:我正在摆弄此解决方案,不仅按月间隔进行分组,而且还显示 来自 和每个间隔的到 日期。
检查出来:
答案 1 :(得分:0)
您可以使用case expression,然后按case
的结果分组。
SELECT
CASE
WHEN where date >='2012-05-05' and date<='2012-06-05' THEN 1
WHEN where date >='2012-06-06' and date<='2012-07-06' THEN 2
ELSE 3
END AS period, COUNT(*)
FROM your_table
GROUP BY period
答案 2 :(得分:0)
希望这个帮助,我假设日期范围是动态的,如下:
2012-01-01 to 2012-02-01
2012-02-02 to 2012-03-02
2012-03-03 to 2012-04-03
2012-04-04 to 2012-05-04
2012-05-05 to 2012-06-05
...
所以,我可以使用以下方式对其进行分组:
SELECT *, IF(day(date)>=month(date), month(date), month(date)-1) as PERIOD
FROM your_tablename
GROUP BY PERIOD;