[英]Mysql query for group by month
我希望做一些像從表中獲取所有行的事情
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)
我如何編寫我的查詢來實現相同的目標?
謝謝...
嘗試此解決方案:
您可以通過TIMESTAMPDIFF()函數將參數最小值( 2012-05-05
)+ 1過去的月數與每行中的日期進行GROUP BY
:
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個月后的日期分開分組。
編輯 :我擺弄周圍這種解決方案不僅通過了一個月的間隔分組,而且從 和每個區間的日期顯示。
看看這個:
您可以使用case表達式 ,然后對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
希望這個幫助,我假設日期范圍是動態的,如下所示:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.