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