Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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_Join - Fatal编程技术网

Mysql 如何连接两个不同的表以及两个日期之间的平均值

Mysql 如何连接两个不同的表以及两个日期之间的平均值,mysql,sql,join,Mysql,Sql,Join,我有两个表,表1和表2,结构如下: 表1: 表2: ` 我想把它们合并成这样: ....|VALUE1| STARTDATE| ENDDATE| AVG TEMPERATURE| ....|1 |2015-01-01|2015.01.03| 1.3| ....|1 |2015-01-01|2015.01.03| 1.3| ....|2 |2015-01-01|2015.01.04| 1.75|

我有两个表,表1和表2,结构如下:

表1: 表2: `

我想把它们合并成这样:

....|VALUE1| STARTDATE|   ENDDATE| AVG TEMPERATURE|
....|1     |2015-01-01|2015.01.03|             1.3|
....|1     |2015-01-01|2015.01.03|             1.3| 
....|2     |2015-01-01|2015.01.04|            1.75| 
....|3     |2015-01-02|2015.01.04|               2|
....|4     |2015-01-03|2015.01.05|               2|   
....|5     |2015-01-03|2015.01.05|               2|
....|6     |2015-01-03|2015.01.06|             2.5|
....|7     |2015-01-04|2015.01.06|               3|
....|8     |2015-01-04|2015.01.08|               3|
....|N     |2015-01-04|2015.01.09|               3|
所以我想计算新结构中开始日期和结束日期之间这段时间的平均温度

我尝试了以下查询:

select TABLE1.STARTDATE, TABLE1.ENDDATE,AVG(TABLE2.TEMPERATURE) as AVGTEMPERATURE
from TABLE1
left outer join TABLE2
on TABLE2.Date between TABLE1.STARDATE and TABLE1.ENDDATE
但它不起作用,并显示以下信息:

列“TABLE1.STARDATE”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中


通过使用子查询,尝试下面的方法

   select b.*,a.* from from TABLE1 b
   left outer join 
   ( select t2.*,t1.avgtemp  from
    ( select VALUE1, avg(TEMPERATURE) as avgtemp from
    TABLE2 group by VALUE1 
    ) t1 join TABLE2 t2 on t1.VALUE1=t2.VALUE1
    ) a on on a.Date between b.STARDATE and b.ENDDATE
出现此错误是因为您使用了聚合函数avg并选择了表中的所有列,但在group by中未使用任何内容

您需要group by:


对切勿使用SELECT*“..”的含义是什么?其他列其他值
select TABLE1.STARTDATE, TABLE1.ENDDATE,AVG(TABLE2.TEMPERATURE) as AVGTEMPERATURE
from TABLE1
left outer join TABLE2
on TABLE2.Date between TABLE1.STARDATE and TABLE1.ENDDATE
   select b.*,a.* from from TABLE1 b
   left outer join 
   ( select t2.*,t1.avgtemp  from
    ( select VALUE1, avg(TEMPERATURE) as avgtemp from
    TABLE2 group by VALUE1 
    ) t1 join TABLE2 t2 on t1.VALUE1=t2.VALUE1
    ) a on on a.Date between b.STARDATE and b.ENDDATE
select t1.STARTDATE, t1.ENDDATE, AVG(t1.TEMPERATURE) as AVGTEMPERATURE
from TABLE1 t1 left outer join
     TABLE2 t2
     on t2.Date between t1.STARDATE and t1.ENDDATE
group by t1.STARTDATE, t1.ENDDATE;