3

テーブルからすべての行を取得するようなことをしようとしています

where date >='2012-05-05' and date<='2012-07-20'

"group by"MySQL に行を返してもらいたい

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)

同じことを達成するためにクエリをどのように書くことができますか?

ありがとうございました...

4

3 に答える 3

5

この解決策を試してください:

TIMESTAMPDIFF()関数を使用して、パラメーターの最小値 ( ) + 1 から各行の日付までのGROUP BY経過月数を取得できます。2012-05-05

GROUP BY TIMESTAMPDIFF(MONTH, '2012-05-05' + INTERVAL 1 DAY, date)

最小パラメータに +1 日を追加する理由は次のとおりです。

  • 2012-05-05to2012-06-04は0ヶ月ですが…
  • 2012-05-05to2012-06-05は 1 か月です

^ そのため、2012-06-05実際にグループ化する必要がある場合、行は 0 か月経過した日付とは別にグループ化されます。


編集:月間隔でグループ化するだけでなく、各間隔の開始日と終了日も表示するこのソリューションをいじっていました。

見てみな:

SQLFiddle デモ

于 2012-07-30T06:48:24.787 に答える
0

ケース式を使用して、の結果でgroupbyすることができます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-07-30T05:26:10.583 に答える
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-07-30T07:43:52.457 に答える