Используя MySQL Workbench, есть ли способ заполнить отсутствующие даты и создать новую строку с последним заполненным статусом - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время у меня есть массивная таблица всех изменений статуса для указанного c ID с соответствующей датой, и несколько идентификаторов имеют одинаковые данные. В настоящее время таблица выглядит как

id  status  date
1 open 2020-06-21
1 closed 2020-06-24
2 open 2020-06-23
2 closed 2020-06-25

И я пытаюсь добраться до этого. Заполнение дат с последним статусом.

id  status  date
1 open 2020-06-21
1 open 2020-06-22
1 closed 2020-06-23
2 open 2020-06-22
2 open 2020-06-23
2 closed 2020-06-24

Эта таблица всегда будет постоянно обновляться, поэтому я не уверен, как лучше всего хранить информацию, может быть, отдельное представление? Я также изучаю использование календарных таблиц, но это не кажется лучшим решением (но если это так, скажите мне). Кто-нибудь сталкивался с подобной проблемой раньше и у него есть хорошее решение, которое они уже сделали в прошлом? Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 14 июля 2020

Если ваша версия mysql поддерживает CTE (цитирование вашей версии полезно при запросе), тогда

WITH CTE as
(
select s.id,dt from dates 
cross join (select distinct id from t) s
where dt between (select min(date) from t where t.id = s.id) and (select max(date) from t where t.id = s.id)
)
select cte.id,cte.DT ,
        #t.id,t.DATE,t.status,
        coalesce(t.status,
        (select t1.status from t t1 
        where t1.id = cte.id and t1.date < cte.dt and t1.status is not null 
        order by t1.date desc limit 1)
        ) status
from cte
left join t on cte.dt = t.date and t.id = cte.id
order by cte.id,cte.dt;

Где даты - моя таблица календаря.

Часть cte захватывает дату диапазон для каждого идентификатора и заполнение основного запроса путем поиска самого последнего ненулевого статуса для каждого идентификатора, если требуется (объединение)

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