MySQL - Добавление отсутствующих записей даты в таблицу - PullRequest
0 голосов
/ 26 октября 2018

У меня есть этот набор данных, который содержит данные только по рабочим дням.Вот как это выглядит:

ID  Name        Some Val    Other Val   Date

10  Somebody    33001.93    33001.93    2018-10-01
10  Somebody    33481.93    33481.93    2018-10-02
10  Somebody    33001.93    33001.93    2018-10-03
10  Somebody    33582.76    33582.76    2018-10-04
10  Somebody    33582.73    33582.79    2018-10-05
10  Somebody    33582.76    33582.76    2018-10-08
10  Somebody    33342.76    33342.76    2018-10-09
10  Somebody    33462.76    33462.76    2018-10-10

Мое вычисление требует заполнения данных за все дни месяца.Чтобы сделать данные пригодными для использования, мне нужно заполнить данные и для выходных.

В приведенном выше примере данных пропущенные записи для дат 2018-10-06 и 2018-10-7 должны быть реплицированы в соответствии с последним доступным значением (2018-10-05) в этом случае.Таким образом, результирующий набор данных после преобразования выглядит следующим образом:

ID  Name        Some Val    Other Val   Date

10  Somebody    33001.93    33001.93    2018-10-01
10  Somebody    33481.93    33481.93    2018-10-02
10  Somebody    33001.93    33001.93    2018-10-03
10  Somebody    33582.76    33582.76    2018-10-04
10  Somebody    33582.73    33582.79    2018-10-05

10  Somebody    33582.73    33582.79    2018-10-06
10  Somebody    33582.73    33582.79    2018-10-07

10  Somebody    33582.76    33582.76    2018-10-08
10  Somebody    33342.76    33342.76    2018-10-09
10  Somebody    33462.76    33462.76    2018-10-10

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

Мой опыт работы с SQL ограничен и исходит из фона SASЯ могу сделать это с помощью макросов.Я полностью застрял в том, как атаковать эту проблему в SQL.

Нужно руководство, как действовать.

1 Ответ

0 голосов
/ 26 октября 2018

Хммм.,,достаточно ли этого?

select ID, Name, val1, val2, date
from t
union all
select id, name, val1, val2, date + interval 1 day
from t
where dayofweek(date) = 6
union all
select id, name, val1, val2, date + interval 2 day
from t
where dayofweek(date) = 6;

Если месяц заканчивается в пятницу или субботу, это добавляет дополнительный день или два.Вы можете обойти это, используя предложения where в подзапросе.

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