У меня есть таблица MariaDB со следующей схемой:
+-------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | 0 | |
| date | date | NO | PRI | NULL | |
| HE | tinyint(3) unsigned | NO | PRI | 0 | |
| minute | tinyint(3) unsigned | NO | PRI | 0 | |
| price | float | NO | | NULL | |
+-------------------+---------------------+------+-----+---------+-------+
Таблица содержит цены с пятиминутными интервалами (часы 1-24 и минуты 0-55).Интервалы без цен не имеют строк.Я пытаюсь написать запрос, чтобы заполнить пропущенные интервалы со значениями нуля, не просто записывая строки с этой информацией.
Я попытался использовать подзапрос со всеми 24-часовыми и 5-минутными интервалами и присоединиться к нему.в столбцы он и минуты безуспешно.
Код, который я пробовал ниже.Подзапрос правильно возвращает часы 1-24 и 5-минутные интервалы 0-55, но окончательный результат включает только строки, заполненные в таблице цен, а не полный временной ряд.Я думал, что правое соединение должно сделать это, но я также попытался внутреннее соединение, левое соединение и присоединиться без успеха.
select B.id, B.date, A.he, A.minute, B.price
from price B
right join (select distinct he, minute from price where id = 4093739409 and minute % 5 = 0 order by he,minute) as A
on B.he = A.he and B.minute = A.minute
where B.date = '2019-04-18' and B.id = 4093739409;