Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySql查询中的多时间聚合_Mysql_Sql_Average - Fatal编程技术网

mySql查询中的多时间聚合

mySql查询中的多时间聚合,mysql,sql,average,Mysql,Sql,Average,我已设法按时间聚合一个值,得到如下查询结果: 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 SELECT DATE(takenat) AS ta

我已设法按时间聚合一个值,得到如下查询结果:

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
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
一些示例输出:

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
但是,我希望有多个channelid的结果(在同一查询中)

takedate HourTaken ch1av ch2av ch4av

例如,channelid=1、2和4的每小时平均值


我尝试过子查询,但我的SQLFoo还不够

如果您有多种情况,请在中使用

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
这与使用

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

如果您有多个条件,请在
中使用

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
这与使用

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

听起来你想要这样的东西:

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
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

听起来你想要这样的东西:

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
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