按月分组的Mysql查询

按月分组的Mysql查询,mysql,group-by,monthcalendar,Mysql,Group By,Monthcalendar,我希望做一些事情,比如从表中获取所有行 where date >='2012-05-05' and date<='2012-07-20' 如何编写查询以实现相同的目标 谢谢…您可以使用,然后根据案例的结果分组 SELECT CASE WHEN where date >='2012-05-05' and date<='2012-06-05' THEN 1 WHEN where date >='2012-06-06' and date<

我希望做一些事情,比如从表中获取所有行

where date >='2012-05-05' and date<='2012-07-20'
如何编写查询以实现相同的目标

谢谢…

您可以使用,然后根据案例的结果分组

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
选择
案例
当日期>='2012-05-05'和日期='2012-06-06'和日期时,尝试此解决方案:

您可以通过以下功能对从参数最小值(
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个月的日期分开分组


编辑:我在摆弄这个解决方案,不仅按月份间隔分组,还显示每个间隔的到日期

请查看:


希望这有帮助,我假设日期范围是动态的,如下所示:

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;

但是,巴迪,日期范围是动态选择的,而不是静态的,只是因为我刚才提到过,日期可以是2012-01-24到2012-12-01@user1537158这只是一个例子,你应该自己定义你的范围。我可以用上面的技术显示mysql分组的日期范围吗?\@user1537158看看我在SQLFIDLE演示中做了什么。它看起来有点凌乱和复杂,但它可以工作。只需在显示
2012-05-05
2012-07-20
的位置分别插入最小和最大参数。另外,请确保在“分组依据”中包含
fromdate
todate
列,就像我在演示中所做的那样。@user1537158我的荣幸!实际上,在回答您的问题时,我刚刚了解了
TIMESTAMPDIFF
。现在我知道了一些我以前不知道的事情,所以谢谢你问我这个问题!这样的话,你就可以每月加一天返回行,而不仅仅是每月。
SELECT *, IF(day(date)>=month(date), month(date), month(date)-1) as PERIOD 
FROM your_tablename 
GROUP BY PERIOD;