mysql查询将3个查询合并到一个表中,同时求平均值

mysql查询将3个查询合并到一个表中,同时求平均值,mysql,join,average,Mysql,Join,Average,我有3个非常大的表,每分钟记录一次值, 下面是这些表格的摘录 我想得到这些表1天内的每小时平均值,并将它们与时间联系起来,请注意ph值和温度的记录时间之间有几秒钟的间隔 表PH值仅限提取物,该表非常大,值超过130000 ID time Ph 72176 2013-04-06 03:29:34 7.58 72177 2013-04-06 03:30:34 7.58 72178 2013-04-06 03:31:

我有3个非常大的表,每分钟记录一次值, 下面是这些表格的摘录

我想得到这些表1天内的每小时平均值,并将它们与时间联系起来,请注意ph值和温度的记录时间之间有几秒钟的间隔

表PH值仅限提取物,该表非常大,值超过130000

    ID      time                Ph

    72176   2013-04-06 03:29:34 7.58
    72177   2013-04-06 03:30:34 7.58
    72178   2013-04-06 03:31:34 7.54
    72179   2013-04-06 03:32:34 7.58
    72180   2013-04-06 03:33:34 7.58
    72181   2013-04-06 03:34:34 7.58
    72182   2013-04-06 03:35:34 7.54
    72183   2013-04-06 03:36:34 7.58
    72184   2013-04-06 03:37:34 7.54
    72185   2013-04-06 03:38:34 7.58
    72186   2013-04-06 03:39:34 7.58
    ID      time            temperature

133312  2013-04-06 03:29:36 25.37
133313  2013-04-06 03:30:36 25.37
133314  2013-04-06 03:31:36 25.37
133315  2013-04-06 03:32:36 25.31
133316  2013-04-06 03:33:36 25.31
133317  2013-04-06 03:34:36 25.31
133318  2013-04-06 03:35:36 25.37
133319  2013-04-06 03:36:36 25.31
133320  2013-04-06 03:37:36 25.31
133321  2013-04-06 03:38:36 25.31
133322  2013-04-06 03:39:36 25.37
    ID      time            solids

123791  2013-04-06 03:29:49 140
123792  2013-04-06 03:30:49 140
123793  2013-04-06 03:31:49 143
123794  2013-04-06 03:32:49 140
123795  2013-04-06 03:33:49 140
123796  2013-04-06 03:34:49 140
123797  2013-04-06 03:35:49 140
123798  2013-04-06 03:36:49 143
123799  2013-04-06 03:37:49 140
123800  2013-04-06 03:38:49 140
123801  2013-04-06 03:39:49 140
表温度1仅限摘录,此表非常大,值超过130000

    ID      time                Ph

    72176   2013-04-06 03:29:34 7.58
    72177   2013-04-06 03:30:34 7.58
    72178   2013-04-06 03:31:34 7.54
    72179   2013-04-06 03:32:34 7.58
    72180   2013-04-06 03:33:34 7.58
    72181   2013-04-06 03:34:34 7.58
    72182   2013-04-06 03:35:34 7.54
    72183   2013-04-06 03:36:34 7.58
    72184   2013-04-06 03:37:34 7.54
    72185   2013-04-06 03:38:34 7.58
    72186   2013-04-06 03:39:34 7.58
    ID      time            temperature

133312  2013-04-06 03:29:36 25.37
133313  2013-04-06 03:30:36 25.37
133314  2013-04-06 03:31:36 25.37
133315  2013-04-06 03:32:36 25.31
133316  2013-04-06 03:33:36 25.31
133317  2013-04-06 03:34:36 25.31
133318  2013-04-06 03:35:36 25.37
133319  2013-04-06 03:36:36 25.31
133320  2013-04-06 03:37:36 25.31
133321  2013-04-06 03:38:36 25.31
133322  2013-04-06 03:39:36 25.37
    ID      time            solids

123791  2013-04-06 03:29:49 140
123792  2013-04-06 03:30:49 140
123793  2013-04-06 03:31:49 143
123794  2013-04-06 03:32:49 140
123795  2013-04-06 03:33:49 140
123796  2013-04-06 03:34:49 140
123797  2013-04-06 03:35:49 140
123798  2013-04-06 03:36:49 143
123799  2013-04-06 03:37:49 140
123800  2013-04-06 03:38:49 140
123801  2013-04-06 03:39:49 140
仅提取表格实体,此表格非常大,值超过130000

    ID      time                Ph

    72176   2013-04-06 03:29:34 7.58
    72177   2013-04-06 03:30:34 7.58
    72178   2013-04-06 03:31:34 7.54
    72179   2013-04-06 03:32:34 7.58
    72180   2013-04-06 03:33:34 7.58
    72181   2013-04-06 03:34:34 7.58
    72182   2013-04-06 03:35:34 7.54
    72183   2013-04-06 03:36:34 7.58
    72184   2013-04-06 03:37:34 7.54
    72185   2013-04-06 03:38:34 7.58
    72186   2013-04-06 03:39:34 7.58
    ID      time            temperature

133312  2013-04-06 03:29:36 25.37
133313  2013-04-06 03:30:36 25.37
133314  2013-04-06 03:31:36 25.37
133315  2013-04-06 03:32:36 25.31
133316  2013-04-06 03:33:36 25.31
133317  2013-04-06 03:34:36 25.31
133318  2013-04-06 03:35:36 25.37
133319  2013-04-06 03:36:36 25.31
133320  2013-04-06 03:37:36 25.31
133321  2013-04-06 03:38:36 25.31
133322  2013-04-06 03:39:36 25.37
    ID      time            solids

123791  2013-04-06 03:29:49 140
123792  2013-04-06 03:30:49 140
123793  2013-04-06 03:31:49 143
123794  2013-04-06 03:32:49 140
123795  2013-04-06 03:33:49 140
123796  2013-04-06 03:34:49 140
123797  2013-04-06 03:35:49 140
123798  2013-04-06 03:36:49 143
123799  2013-04-06 03:37:49 140
123800  2013-04-06 03:38:49 140
123801  2013-04-06 03:39:49 140
我目前使用下面的查询得到每小时平均值

SELECT DATE_FORMAT(x.time,'%Y-%m-%d %H:00:00')
     , avg(x.solids) avg_solids
  FROM solids x where time >= NOW() - INTERVAL 1 DAY
 GROUP 
    BY DATE_FORMAT(x.time,'%Y-%m-%d %H:00:00'); 
对于要在1个表中显示的每个传感器x3,如何有效地结合上述查询的时间结果

===============================

下面的查询获取每小时的值,但不确定如何将其转换为每小时的平均值

SELECT DATE_FORMAT(timeTable.minuteTime, '%Y-%m-%d %k:%i') time,
(oT2.temperature) temperature,
(T2.temperature) temp,
(S2.solids) solids,
(P2.Ph) Ph


FROM
(
    SELECT minuteTime.minuteTime minuteTime,
    ( SELECT MAX(time) FROM outside_temperature WHERE time <= minuteTime.minuteTime AND time >= NOW() - INTERVAL 1 DAY) otempTime, 
    ( SELECT MAX(time) FROM temperature1 WHERE time <= minuteTime.minuteTime AND time >= NOW() - INTERVAL 1 DAY) tempTime, 
    ( SELECT MAX(time) FROM Ph WHERE time <= minuteTime.minuteTime AND time >= NOW() - INTERVAL 1 DAY) phTime,  
    ( SELECT MAX(time) FROM solids WHERE time <= minuteTime.minuteTime AND time >= NOW() - INTERVAL 1 DAY) solidsTime

    FROM  
    (
        SELECT DATE(time) + INTERVAL (HOUR(time) DIV 1 *1 ) HOUR minuteTime
        FROM Ph
        WHERE time >= NOW() - INTERVAL 1 DAY AND time <= NOW()
        UNION SELECT DATE(time) + INTERVAL (HOUR(time) DIV 1 *1) HOUR
        FROM solids
        WHERE time >= NOW() - INTERVAL 1 DAY AND time <= NOW()
        UNION SELECT DATE(time) + INTERVAL (HOUR(time) DIV 1 *1) HOUR
        FROM outside_temperature
        WHERE time >= NOW() - INTERVAL 1 DAY AND time <= NOW()
        UNION SELECT DATE(time) + INTERVAL (HOUR(time) DIV 1 *1) HOUR
        FROM temperature1
        WHERE time >= NOW() - INTERVAL 1 DAY AND time <= NOW()
        GROUP BY 1
    ) minuteTime
) timeTable
LEFT JOIN outside_temperature oT2 ON oT2.time = timeTable.otempTime
LEFT JOIN temperature1 T2 ON T2.time = timeTable.tempTime
LEFT JOIN solids S2 ON S2.time = timeTable.solidsTime
LEFT JOIN Ph P2 ON P2.time = timeTable.phTime


GROUP BY DATE_FORMAT(timeTable.minuteTime, '%Y-%m-%d %k:%i') 
ORDER BY minuteTime ASC
似乎这将是一个有用的功能,因为你只看一天。也许这样的事情适合你:

SELECT * FROM
 (SELECT HOUR(time) hour, avg(ph) AS avg_ph
  FROM ph 
  WHERE time >= NOW() - INTERVAL 1 DAY
  GROUP BY hour) p
JOIN 
 (SELECT HOUR(time) hour, avg(temperature) AS avg_temp
  FROM temperature1 
  WHERE time >= NOW() - INTERVAL 1 DAY
  GROUP BY hour) t ON t.hour = p.hour
JOIN 
 (SELECT HOUR(time) hour, avg(solids) AS avg_solids
  FROM solids 
  WHERE time >= NOW() - INTERVAL 1 DAY
  GROUP BY hour) s ON s.hour = p.hour;

由于它使用了内部联接,所以我假设在一个小时内每个表中至少有一条记录,但这似乎是一个合理的假设。

在分组时使用日期格式是没有意义的。通过DATEx.time分组将完成同样的事情,而不必强迫mysql执行大量重复的字符串格式,这些格式将被丢弃。您需要平均每小时或每天,还是两者都需要?或者你需要每小时的平均值,然后是每天每小时的平均值吗?我只需要每小时的平均值,但只在表格上限制显示1天的平均值,按日期分组。时间不会得到所有24个结果,我只得到2个结果。这可能是由于值之间的第二次延迟!考虑将DDLs或SqLFIDLE与期望的结果集一起提供。谢谢,您的表工作了,但是由于我将把结果表推到绘图功能,所以时间需要以DATE时间格式显示,而且查询表上的时间从0开始,在23完成。例如,如果当前时间是上午5点,我希望查询将从昨天上午5点拉到今天上午5点,而不是从上午0点拉到下午23点。如果你知道我的意思的话。我知道,昨天早上6点到今天早上5点,它应该很实用。昨天早上5点和今天早上5点的重叠将是一个问题。如果是我,我会调整WHERE条款,只处理整小时。如果我在分析数据时,得到了23组每小时统计数据,以两个半小时结束,我肯定会扔掉这半小时。至于格式化的时间,只需从任何子查询中提取MINtime或其他内容,您就可以开始比赛了。作为一个noob,有人能帮忙吗,我对时间的格式化及其顺序特别感兴趣我刚才插入的查询,获取所需的每小时值,但我不确定如何将其转换为每小时平均值我做到了,我只是插入:选择p.time,……按p.time排序ASC。但现在我想知道如何在不重叠的情况下获得2天的数据。当前,如果我选择2天,查询将平均2天,并在1天显示