У меня есть таблица с историческими журналами для задач проекта.
Каждая строка содержит идентификатор проекта и дату, когда одна из указанных 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
Очевидно, что это не работает, как задумано, потому что мне нужно отсеять все старые задачи, которые были переделаны - вот где я застрял.
Любые советы или рекомендации приветствуются.
ПРИМЕЧАНИЕ. Ни одна таблица не может быть изменена - я могу только создать новую таблицу фактов из предоставленных данных.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Вероятно, подобный вопрос уже задавался здесь раньше, но я не мог придумать, что конкретно спрашивать, что на самом деле привело к каким-либо полезным результатам. Если кто-то ссылается на аналогичный пост, я отредактирую это сообщение, чтобы включить эту ссылку в качестве ссылки для будущих пользователей.