Как объединить две разные таблицы и среднее значение между двумя датами - PullRequest
0 голосов
/ 02 марта 2019

У меня есть две таблицы, TABLE1 и TABLE2 в следующей структуре:

TABLE1:

....|VALUE1| STARTDATE|   ENDDATE|....
....|1     |2015-01-01|2015.01.03|.... 
....|2     |2015-01-01|2015.01.04|.... 
....|3     |2015-01-02|2015.01.04|.... 
....|4     |2015-01-03|2015.01.05|....
....|5     |2015-01-03|2015.01.05|....
....|6     |2015-01-03|2015.01.06|....
....|7     |2015-01-04|2015.01.06|....
....|8     |2015-01-04|2015.01.08|....
....|N     |2015-01-04|2015.01.09|....

TABLE2:

          DATE|   TEMPERATURE|....
    2015-01-01|             1|.... 
    2015-01-02|             2|.... 
    2015-01-03|             1|.... 
    2015-01-04|             3|....
    2015-01-05|             2|....
    2015-01-06|             4|....
    2015-01-07|             3|....
    2015-01-08|             3|....
    2015-01-09|             3|....

`

И я хотел бы объединить их следующим образом:

....|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.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вам нужно GROUP BY:

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;
0 голосов
/ 02 марта 2019

попробуйте, как показано ниже, с помощью подзапроса

   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 и выбрали все столбцы таблицы, но ничего не использовали в группе по

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...