2011-11-11 27 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' 

上記のクエリに基づいて、channel1、channel2、channel3列の平均値を2時間ごとに取得する方法はありますか?ここでSQLクエリで2時間ごとに平均値を取得する方法は?

+0

dバージョン? –

答えて

2

は、TSQLソリューションです:MySQLを想定すると

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 Serverのクエリですか?私はMySQL V5.1.35を使用して、いくつかの構文エラーがあります。 – Acubi

+0

はい、私が作ったスクリプトはSQL Server(tsql)用です –

0

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

このクエリのキーがグループにあるが2時間ごとに記録します。

検討:

床が数以下である最大の整数値を返す関数を=で

time_hh =あなたのDateTime列(類似のデータベース内の1つを見つけます。) ' hhmmm」フォーマット、私はから、意味 '' '23に:59' 0000(あなたのデータベース機能を使用して、DateTimeフィールドをフォーマット)

クエリは次のようになります。

データベースAN
SELECT 
    floor(time_hh/200), 
    min(datetime), 
    max(datetime), 
    avg(channel1), 
    avg(channel2), 
    avg(channel3) 
FROM 
    `table` 
GROUP BY 
    floor(time_hh/200) 
関連する問題