2017-03-08 86 views
0

我有這樣選擇每晚的平均在MYSQL

+-----------------------+---------+ 
| DateTime    | Value | 
+-----------------------+---------+ 
| 2015-08-18 19:36:42 | 22  | 
| 2015-08-18 20:48:49 | 20  | 
| 2015-08-18 21:48:49 | 19  | 
| 2015-08-18 22:48:49 | 23  | 
| 2015-08-18 23:48:49 | 20  | 
| 2015-08-19 00:48:49 | 23  | 
| 2015-08-19 01:48:49 | 21  | 
| 2015-08-19 02:48:49 | 15  | 
     ...     ... 
| 2015-08-19 22:30:16 | 21  | 
| 2015-08-19 23:30:16 | 22  | 
| 2015-08-20 00:30:16 | 25  | 
| 2015-08-20 01:30:16 | 26  | 
     ...     ... 
| 2015-08-20 22:30:16 | 19  | 
| 2015-08-20 23:30:16 | 20  | 
| 2015-08-21 00:30:16 | 21  | 
| 2015-08-21 01:30:16 | 21  | 
     ...     ... 

數據,我要選擇的每個夜晚的平均值,其中在06從當前日期晚開始在06:00:00和結束日期旁邊:00:00。從2015年8月18日作爲「2015年8月18日」 思夜想我想最後的結果看起來像下面:

+---------------+---------+ 
| DateTime  | AvgValue| 
+---------------+---------+ 
| 2015-08-18 | 22  | 
| 2015-08-19 | 20  | 
| 2015-08-20 | 19  | 
| 2015-08-21 | 23  | 
| 2015-08-22 | 20  | 
    ...   .. 

我已經去了雖然很多網站,書籍和去雖然大多數教程,但我無法想出如何編寫此查詢來執行此操作。

任何人都可以幫助我查詢以獲得上述結果。

回答

0

我建議這樣的查詢,但它可能會很慢:

select date(`DateTime` - interval 6 hour), avg(`Value`) as AvgValue 
from tblName 
group by date(`DateTime` - interval 6 hour) 
order by 1 asc 

但我強烈建議增加一個額外的列,僅一夜店(無時間)記錄屬於並添加該列的索引,這樣可以更快地處理查詢。

+0

非常感謝你這是工作的罰款 –

0
select if(hour(DateTime) >= 18, 
      date(date_add(Datetime, interval 1 day)), date(Datetime)) DateAct,  
     avg(`Value`) as AvgValue 
from  yourTable 
group by DateAct 
order by 1; 

檢查在這裏:http://rextester.com/KSB39578

+0

這可不行。它會單獨顯示每一行,因爲它們都將有不同的時間,所以根本沒有分組 – Psi

+0

是的,它必須轉換成日期 – McNets

+0

這不是在你的回答中完成 – Psi