Как объединить две таблицы и усреднить их (почасовая или ежедневная таблица) - PullRequest
1 голос
/ 31 января 2020

У меня есть следующие таблицы:

CREATE TABLE a (DATE TEXT, PRICE INTEGER) 
INSERT INTO a VALUES 
("2019-04-27", 10), ("2019-04-29",20), ("2019-04-30",30), ("2019-05-01",40); 

CREATE TABLE b (DATE TEXT, PRICE INTEGER) 
INSERT INTO b VALUES 
("2019-04-27 01:00", 1), ("2019-04-27 02:30)",3), ("2019-04-27 18:00",2), 
("2019-04-28 17:00",2), ("2019-04-28 21:00",5), 
("2019-04-29 17:00",50), ("2019-04-29 21:00",10), 
("2019-04-30 17:00",10), ("2019-04-30 21:00",20), 
("2019-05-01 17:00",40), ("2019-05-01 21:00",10), 
("2019-05-02 17:00",10), ("2019-05-02 21:00",6); 

Мне нужно объединить эти две таблицы, чтобы таблица b усреднялась по дням, а в таблице 2 столбца (1 - дата (все даты должны быть там) и 2 - это цена (пусто, если нет наблюдений за эту дату). Я пробовал несколько левых соединений, однако не знаю, как решить проблему, заключающуюся в том, что я не могу усреднить почасовые данные для ежедневных. Не могли бы вы помочь?

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Я подозреваю, что вам нужен набор результатов с двумя столбцами. Я не фанат наличия даты в виде строкового типа, но вы можете использовать строковые функции для того, что вы хотите:

select date, sum(price_a) as price_a, sum(price_b) as price_b
from (select a.date, a.price as price_a, null as price_b
      from a
      union all
      select substr(b.date, 1, 10), null, price
      from b
     ) ab
group by date;
0 голосов
/ 31 января 2020

Пожалуйста, выполните запрос согласно ниже SQL -Fiddle :

select DATE(c.date) as date, avg(c.price) as avg_price
from
(select date, price
from a
union all
select date, price
from b
) as c
group by DATE(c.date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...