2015-11-04 69 views
0

,所以我有這樣MySQL查詢生成報告期10天

id | user_id | point | created_at 
------------------------------------------- 
1 | 1  | 10 | 2015-08-03 00:08:25 
2 | 3  | 20 | 2015-08-01 00:08:25 
3 | 4  | 30 | 2015-08-13 00:08:25 
4 | 3  | 10 | 2015-08-25 00:08:25 
5 | 2  | 20 | 2015-09-02 00:08:25 
6 | 1  | 10 | 2015-09-14 00:08:25 
7 | 4  | 50 | 2015-09-22 00:08:25 
8 | 2  | 80 | 2015-09-30 00:08:25 
9 | 1  | 30 | 2015-10-02 00:08:25 
10 | 5  | 90 | 2015-10-02 00:08:25 

表我可以生成一個查詢,以這樣的結果呢?

start_date | end_date | total_point_100_or_more | total_point_less_than_100 
------------------------------------------------------------------------------ 
2015-08-01 | 2015-08-10 | 3 User     | 7 User 
2015-08-11 | 2015-08-20 | 8 User     | 5 User 
2015-08-21 | 2015-08-30 | 10 User     | 5 User 
2015-08-31 | 2015-09-09 | 4 User     | 6 User 

我現在沒有任何代碼行,因爲我完全不知道從哪裏開始。

+0

如果min(created_at)是8月,該怎麼辦4.它會從10個塊中刪除嗎?魔鬼的細節 – Drew

+0

您需要創建一個存儲過程,它將讀取您的表格並執行您所需的操作,例如篩選和總結10天數據並將它們放入一個表格中,然後您可以將該表格作爲輸出讀取,您可以調度此存儲過程每天更新您的最近記錄。 –

+0

@Drew,如果start_date是8月4日,那麼end_date將是8月13日。 – otezz

回答

0

我還沒有測試過這個,因爲你的樣本答案與你的樣本數據不符,但是下面的東西應該可以工作。在這裏,我假設你想知道用戶可能是如何得到一個總分(在每個週期內),高於或低於100

SELECT start_date, 
     DATEADD(day, 9, start_date) as end_date, 
     SUM(CASE WHEN period_points >= 100 THEN 1 ELSE 0 END) as total_point_100_or_more, 
     SUM(CASE WHEN period_points < 100 THEN 1 ELSE 0 END) as total_point_less_than_100 
FROM (
     SELECT start_date, 
       user_id, 
       SUM(point) as period_points 
     FROM (
       SELECT DATEADD(
           day, 
           DATEDIFF(day, '2015-08-01 00:00:00', created_at)/10*10, 
           '2015-08-01 00:00:00' 
         ) as start_date, 
         id, 
         user_id, 
         point 
       FROM points 
     ) AS p 
     GROUP BY start_date, user_id 
) as q 
GROUP BY start_date 

請注意,我並沒有轉換成整數計數爲文本並追加「用戶「就像你的樣本。