SQL请求具有特定时段的平均值

时间:2014-07-09 17:27:13

标签: mysql average

我有一个来自气象站的mySQL数据库。 我有一个带有高图的小网站来查看结果。它工作得很好但是很长一段时间(例如一年)我有非常重要的分数(每10分钟一分)。 为了高效显示,我使用了这个查询:

mysql_query("SET @rownum:=0;");
$query = sprintf("SELECT timestamp,rec_date,temp_in,temp_out,dewpoint,rel_hum_in,rel_hum_out FROM weather WHERE rec_date >= '$Date1' AND rec_date <= '$Date2' AND MOD((@rownum:=@rownum+1),144)=1;");
$result = mysql_query($query) or die('text');

Date1和Date2由用户从datepicker给出。我使用mysql_fetch_assoc函数将结果存储在各种数组中。因此查询每144条记录返回一个点(每天一个点)。但它并不是当天价值的平均值,而只是当天的一个记录。

我想平均每天的时间戳,temp_in,temp_out,露点,rel_hum_in和rel_hum_out,即每个平均365个(取决于Date1和Date2,但在我的例子中是一年)。我的问题是,我是SQL语言的新手,我无法找到实现这一目标的方法。 有人能帮我吗 ?提前谢谢。

2 个答案:

答案 0 :(得分:0)

使用AVG()聚合函数。

SELECT DATE(timestamp) date, AVG(temp_in) temp_in, AVG(temp_out), ...
FROM weather
WHERE rec_date BETWEEN '$Date1' AND '$Date2'
GROUP BY date

答案 1 :(得分:0)

使用avg ...表示平均值,date(rec_date)只使用日期prt rec_date(如果它是datetime)。

select date(rec_date) as day,
       avg(timestamp) as averageTimestamp,
       avg(temp_in) as averageTempIn,
       avg(temp_out) as averageTempOut,
       avg(dewpoint) as averageDewPoint
       --etc
from weather
where year(rec_dat) = 2014--if you wanna data for a year. You may of course also use the between clause
group by date(rec_date)