Обновление MySQL и выберите запрос объединения - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть две таблицы, подобные этим:

s1

date    quantity
2014-01-02  200
2014-01-05  400
2014-02-10  200
2014-02-13  300

s2

date        Temperature     Humidity
2014-01-01  12              60
2014-01-02  14              80
2014-01-03  12              60
2014-01-04  14              80
2014-01-05  12              60
2014-01-06  16              80
2014-01-07  20              60
2014-01-08  14              80
2014-02-01  13              60
2014-02-02  15              80
2014-02-03  16              60
2014-02-04  18              80
2014-02-05  12              60
2014-02-06  17              80
2014-02-07  28              60
2014-02-08  14              80

Мне нужно обновить таблицу, которая объединяет и суммировать приведенную выше таблицу в месяц, например:

s1+s2

date    quantity    Temperature Humidity
2014-01     600         14,25       70
2014-02     500         16,62       70
2014-03 
2014-04 
2014-05 
2014-06 

У меня есть этот кодэто прекрасно работает для создания объединенных данных, но я не могу создать обновление этой таблицы

select t2.year as year, t2.month as month, t1.quantity as quantity, t2.avgtemp as avgtemp, t2.avghum as avghum
from
    (select year(s1.`date`) as year, month(s1.`date`) as month, sum(s1.`quantity`) as quantity, 0 as avgtemp, 0 as  avghum from s1 
    group by year, month) t1
right join
    (select year(s2.`date`) as year, month(s2.`date`) as month,0 as quantity, avg(s2.`temperature`) as avgtemp, avg(s2.`humidity`) as  avghum from s2 
    group by year, month )t2
on t1.year=t2.year and t1.month=t2.month

1 Ответ

0 голосов
/ 05 апреля 2019

Вы можете проверить правильность результата, используя

select t.year, t.month, t1.SumQuantity, t2.avgTemp, t2.avgHum
FROM (
  select  year(s1.date), month(s1.date) from s1
  union 
  select  year(s2.date), month(s2.date) from s2
) left join (
  select  year(s1.date), month(s1.date), SUM(s1.`quantity`) SumQuantity
  from s1
  group by  year(s1.date), month(s1.date)
) t1 on t1.year = t.year 
        and t1.month = t.month 
left JOIN (
  select  year(s2.date), month(s2.date),  avg(s2.`Temperature`) avgTemp , avg(s2.`Humidity`) avgHum
  from s1
  group by  year(s1.date), month(s1.date)
) t2 on t2.year = t.year 
        and t2.month = t.month 

, и если запрос выше вернет правильный результат, используйте его для обновления

update my_table m 
inner join  (
  select t.year, t.month, t1.SumQuantity, t2.avgTemp, t2.avgHum
  FROM (
    select  year(s1.date), month(s1.date) from s1
    union 
    select  year(s2.date), month(s2.date) from s2
  ) left join (
    select  year(s1.date), month(s1.date), SUM(s1.`quantity`) SumQuantity
    from s1
    group by  year(s1.date), month(s1.date)
  ) t1 on t1.year = t.year 
          and t1.month = t.month 
  left JOIN (
    select  year(s2.date), month(s2.date),  avg(s2.`Temperature`) avgTemp , avg(s2.`Humidity`) avgHum
    from s1
    group by  year(s1.date), month(s1.date)
  ) t2 on t2.year = t.year 
          and t2.month = t.month 
) tt  ON tt.year = year(m.date)       
        and tt.month = month(m.date)
set m.quantity  = tt.SumQuantity, 
    m.Temperature = tt.AvgTemp,  
    m.Humidity = tt.AvgHum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...