Уменьшить гранулярность таблицы исторического статуса? - PullRequest
1 голос
/ 08 апреля 2020

У меня есть таблица с историческими журналами для задач проекта.

enter image description here

Каждая строка содержит идентификатор проекта и дату, когда одна из указанных c задач была либо запущена, либо завершена.

Мне нужно уменьшить зерно, чтобы все времена начала / окончания были в одной строке (см. Идентификаторы 1 и 2 на рисунке)

Но вот часть, которая меня поражает, в некоторых строках могут быть повторяющиеся записи задачи, но с разными временными метками - это означает, что пользователь должен был go вернуться назад и повторить задачу. Для этого мне нужна только последняя отметка времени для этого столбца c (см. ID 3 на изображении).

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

То, как я до сих пор делал это, выглядит так:

SELECT ID, a1.A_START, a2.A_END [...] c2.C_END FROM PROJECT
LEFT JOIN (SELECT ID, A_START FROM PROJECT_TASK ORDER BY A_START DESC) a1 ON a1.ID = p.ID
LEFT JOIN (SELECT ID, A_END FROM PROJECT_TASK ORDER BY A_END DESC)     a2 ON a2.ID = p.ID
LEFT JOIN (SELECT ID, B_START FROM PROJECT_TASK ORDER BY B_START DESC) b1 ON b1.ID = p.ID
...
LEFT JOIN (SELECT ID, C_END FROM PROJECT_TASK ORDER BY C_END DESC)     c2 ON c2.ID = p.ID

Очевидно, что это не работает, как задумано, потому что мне нужно отсеять все старые задачи, которые были переделаны - вот где я застрял.

Любые советы или рекомендации приветствуются.

ПРИМЕЧАНИЕ. Ни одна таблица не может быть изменена - я могу только создать новую таблицу фактов из предоставленных данных.


ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Вероятно, подобный вопрос уже задавался здесь раньше, но я не мог придумать, что конкретно спрашивать, что на самом деле привело к каким-либо полезным результатам. Если кто-то ссылается на аналогичный пост, я отредактирую это сообщение, чтобы включить эту ссылку в качестве ссылки для будущих пользователей.

1 Ответ

0 голосов
/ 08 апреля 2020

Вы можете использовать агрегирование для всех этих 6 столбцов. Вы можете изменить имена столбцов и псевдонимы по желанию

select id, max(col1), max(col2), max(col3), max(col4), max(col5), max(col6)
from your_table
group by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...