簡體   English   中英

Mysql按月查詢

[英]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-052012-06-04是0個月,但是......
  • 2012-05-052012-06-05是1個月

^因此, 2012-06-05行將與我們實際希望將它們分組的0個月后的日期分開分組。


編輯 :我擺弄周圍這種解決方案不僅通過了一個月的間隔分組,而且 每個區間的日期顯示。

看看這個:

SQLFiddle演示

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM