2011-11-11 174 views
2
$query= SELECT channel1, channel2, channel3 
FROM `Table` 
WHERE `id` =1 
AND `dateTime` >= '2011-10-15 00:00:01' 
AND `dateTime` <= '2011-10-17 23:59:59' 

根據以上查詢,如何獲取每2小時通道1,通道2,通道3列的平均值?如何在sql查詢中每2小時獲取平均值?

+0

其數據庫中的d版本? –

回答

2

這裏是一個TSQL的解決方案:

SELECT avg(channel1) channel 1, avg(channel2) channel2, avg(channel3) channel3, 
     dateadd(hour, datediff(hour, 0,datetime)/2*2,0) FROM Table 
WHERE id =1 AND 
dateTime >= '2011-10-15 00:00:01' AND 
dateTime <= '2011-10-17 23:59:59' 
group by datediff(hour, 0,datetime)/2*2 
+0

謝謝@ t-clausen.dk。是SQL服務器的查詢?我用的是mysql V5.1.35,有一些語法錯誤。 – Acubi

+0

是的,我製作的腳本是用於sql server(tsql) –

0

假設MySQL的:

SELECT date(`dateTime`) dateDay, 2*floor(date_format(`dateTime`,'%H')/2) dateHour, 
     avg(channel1), avg(channel2), avg(channel3) 
FROM `Table` 
WHERE `id` =1 
AND `dateTime` >= '2011-10-15 00:00:01' 
AND `dateTime` <= '2011-10-17 23:59:59' 
group by date(`dateTime`), 2*floor(date_format(`dateTime`,'%H')/2) 
0

這個查詢的關鍵是組記錄每兩小時。

考慮:

樓=返回的最大整數值大於一個數量等於或小於函數(發現你的數據庫一個類似)在

time_hh =您的日期時間列的「 hhmmm」的格式,我的意思是,從‘0000’到'23:59'

(使用你的數據庫功能格式化時間字段)的查詢是:

SELECT 
    floor(time_hh/200), 
    min(datetime), 
    max(datetime), 
    avg(channel1), 
    avg(channel2), 
    avg(channel3) 
FROM 
    `table` 
GROUP BY 
    floor(time_hh/200)