3

ここに画像の説明を入力

次のエントリを含むテーブルがあります。

completed_time||   BOOK_CNT
*********************************************
2013-07-23    | 2
2013-07-22    | 1
2013-07-19    | 3
2013-07 16    |5
2013-07-12    |4
2013-07-11    |2
2013-07-02    |9
2013-06-30    |5

さて、上記のエントリをデータ分析に使用したいと思います。

DAYS_FROM、DAYS_TO、および PERIOD が 3 つの変数であるとします。

次のようなクエリを実行する必要があります。

" PERIOD 間隔の DAYS_FROM から DAYS_TO までの書籍の合計。 "

DAYS_FROMは、YYYY-MM-DD 形式の日付です。

DAYS_TOは YYYY-MM-DD 形式の日付です

PERIODは {1W,2W,1M,2M,1Y} で、W,M,Y は週、月、年を表します。

例: クエリ DAYS_FROM=2013-07-23 、 DAYS_TO=2013-07-03 および PERIOD=1W は次を返す必要があります。

ith week - total
1 -        3
2-         8
3-         6 
4-         14

説明:

1-3 means (The total book from 2013-07-21(sun) to 2013-07-23(tue) is 3 )
2-8 means (The total book from 2013-07-14(sun) to 2013-07-21(sun) is 8 )
3-16 means (The total book from 2013-07-07(sun) to 2013-07-14(sun) is 6 )
4-14 means (The total book from 2013-07-03(wed) to 2013-07-07(sun) is 14 )

よりよく理解するために、カレンダーの画像を参照してください

そのようなクエリを起動する方法は?

私が試したことは?

 SELECT DAY(completed_time), COUNT(total) AS Total
  FROM my_tab
 WHERE completed_time BETWEEN '2013-07-23' - INTERVAL 1 WEEK AND '2013-07-03'
 GROUP BY DAY(completed_time);

上記のクエリは 2013 年 7 月 23 日から 7 日を差し引いたため、2013 年 7 月 16 日から 2013 年 7 月 23 日まで が第 1 週2013年 7 月 9 日から 2013 年 7 月 16 日までが第 2 週と見なされます。

4

1 に答える 1

1

簡単な出発点は以下のようなものです。もちろんith、ニーズに合わせて値を調整することもできます。

SET @period='1M';

SELECT CASE WHEN @period='1Y' THEN YEAR(completed_time) 
            WHEN @period='1M' THEN YEAR(completed_time)*100+MONTH(completed_time)
            WHEN @period='2M' THEN FLOOR((YEAR(completed_time)*100+MONTH(completed_time))/2)*2
            WHEN @period='1W' THEN YEARWEEK(completed_time)
            WHEN @period='2W' THEN FLOOR(YEARWEEK(completed_time)/2)*2
       END ith,
       SUM(BOOK_CNT) Total
FROM my_tab
GROUP BY ith
ORDER BY ith DESC;

でテストする SQLfiddle

于 2013-07-24T09:34:52.273 に答える