按月分组的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;