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 两个group by查询之间的自然联接_Mysql_Sql_Join - Fatal编程技术网

Mysql 两个group by查询之间的自然联接

Mysql 两个group by查询之间的自然联接,mysql,sql,join,Mysql,Sql,Join,这里还有一个小问题。 我必须合并两个不同的表。 在第一个例子中,我必须找到一小时datetime范围内的平均外部温度。 在第二个例子中,我必须计算每小时使用的千瓦数,在小时日期时间范围内。 单个查询可以很好地工作,但是当我尝试加入它们时,它们就不起作用了。 此查询不起作用: select dataora, AVG(Test) from temperature where dataora between '2013-11-01' and '2013-11-31' GROUP BY date(d

这里还有一个小问题。 我必须合并两个不同的表。 在第一个例子中,我必须找到一小时datetime范围内的平均外部温度。 在第二个例子中,我必须计算每小时使用的千瓦数,在小时日期时间范围内。 单个查询可以很好地工作,但是当我尝试加入它们时,它们就不起作用了。 此查询不起作用:

select dataora, AVG(Test) 
from temperature 
where dataora between '2013-11-01' and '2013-11-31' GROUP BY date(dataora),hour(dataora)
natural join (
    SELECT
      (t1.dt) AS time,(case
     when t1.value>t2.value AND t2.value>0
          then abs(t1.value - t2.value)
     when t1.value>t2.value AND t2.value=0
          then t2.value
          else t1.value END)kwhg, 
     (case
     when t1.value1>t2.value1 AND t2.value1>0
          then abs(t1.value1 - t2.value1)
     when t1.value1>t2.value1 AND t2.value1=0
          then t2.value1
     when t1.value1=t2.value1 AND t1.value1>0 
        then abs(t1.value1 - t2.value1)
      else 0 END) kwhc, 
      (case
     when t1.value2>t2.value2 AND t2.value2>0
          then abs(t1.value2 - t2.value2)
     when t1.value2>t2.value2 AND t2.value2=0
          then t2.value2
     when t1.value2=t2.value2 AND t1.value2>0 
        then abs(t1.value2 - t2.value2)
      else 0 END)kwhi,
    (case
     when t1.value3>t2.value3 AND t2.value3>0
          then abs(t1.value3 - t2.value3)
     when t1.value3>t2.value3 AND t2.value3=0
          then t2.value3
     when t1.value3=t2.value3 AND t1.value3>0 
        then abs(t1.value3 - t2.value3)
      else 0 END) kwhfm
    FROM 
        (SELECT (dataora) dt, MAX(kwhg) value, MAX(kwhc) value1, MAX(kwhi) value2, MAX(kwhfm) value3  FROM misure where dataora between '2013-11-01' and '2013-11-31' GROUP BY date(dt),hour(dt)) t1
        JOIN
        (SELECT (dataora) dt, MAX(kwhg) value, MAX(kwhc) value1, MAX(kwhi) value2, MAX(kwhfm) value3  FROM misure where dataora between '2013-11-01' and '2013-11-31' GROUP BY date(dt),hour(dt)) t2
        on t1.dt = t2.dt + interval 1 hour) t3
这一行只显示1行(第一行,而不是本例中需要的720行):

我使用自然连接,因为我需要每小时的实际千瓦数和每小时4个测量值(每15分钟)的平均外部温度。 也许答案很简单,但我还没有找到!
提前感谢您的帮助

不要使用
自然加入
。它连接所有具有相同名称的字段。相反,做一个普通连接(我猜是
内部连接
左侧外部连接
),并在日期上使用
on
子句:

(<subquery 1>) s1 join
(<subquery 2>) s2
on s1.time = s2.time
()s1连接
()s2
在s1.time=s2.time上
(<subquery 1>) s1 join
(<subquery 2>) s2
on s1.time = s2.time