0

次のようなクエリ結果を与える時間ごとに 1 つの値を集計することができました。

SELECT date(takenat) AS takendate,
         hour(takenat) AS HourTaken, 
         avg(reading) AS ch1av 
FROM readings 
WHERE channelid = 4 
GROUP BY takendate, HourTaken 
ORDER BY takenat, HourTaken

出力例:

takendate HourTaken ch1av

2013-01-01 0 105.5082
2013-01-01 1 107.2167
2013-01-01 2 106.4833
2013-01-01 3 107.0333

ただし、複数のチャネル ID の結果を (同じクエリで) 取得したい

takedate HourTaken ch1av ch2av ch4av

たとえば、channelid=1、2、および 4 の時間平均

サブクエリを試してみましたが、SQL foo だけでは十分ではありません。

4

2 に答える 2

2

IN複数の条件がある場合に使用します。

select date(takenat) AS takendate,
       hour(takenat) AS HourTaken, 
       avg(reading) AS ch1av,
       channelid 
from   readings 
where  channelid IN (1,2,4)
group  by takendate, HourTaken, channelid 
order  by takenat, HourTaken

これは使用するのと同じですOR

select date(takenat) AS takendate,
       hour(takenat) AS HourTaken, 
       avg(reading) AS ch1av,
       channelid  
from   readings 
where  channelid = 1 OR 
       channelid = 2 OR
       channelid = 4
group  by takendate, HourTaken, channelid
order  by takenat, HourTaken
于 2013-03-09T15:12:04.887 に答える
1

次のようなものが必要なようです。

SELECT DATE(takenat) AS takendate,
       HOUR(takenat) AS HourTaken,
       AVG(CASE WHEN channelid = 1 THEN reading ELSE null END) AS ch1av, 
       AVG(CASE WHEN channelid = 2 THEN reading ELSE null END) AS ch2av, 
       AVG(CASE WHEN channelid = 4 THEN reading ELSE null END) AS ch4av
FROM readings 
WHERE channelid IN (1,2,4)
GROUP BY takendate, HourTaken
ORDER BY takenat, HourTaken
于 2013-03-09T15:19:54.127 に答える