У меня есть система, которая содержит две таблицы. Таблица «проекты» и таблица «дополнения». Таблица проектов содержит исходные данные для «проекта». Детали проекта не могут быть изменены напрямую. Вместо этого используется «дополнение», если необходимо изменить какие-либо детали. Таким образом сохраняется исходная запись в проектах, и по мере добавления дополнений все изменения можно отслеживать по порядку.
Одним из полей проекта является «projectEndDate», которое содержит дату окончания проекта. Это можно переопределить добавлением с помощью «extensionEndDate». В Additions также содержится «extensionDateEntered», которое регистрирует фактическое добавление дополнения в систему.
Мне нужно иметь возможность захватить все проекты, оставляя присоединение к дополнениям, содержащим новую endDate, упорядоченную по новейшей версии дополнения »extensionDateEntered "и получая" extensionEndDate "для этой записи. И чтобы завершить, все результаты должны быть упорядочены по «realClosingDate», который является псевдонимом самой последней даты окончания. Обычно я могу работать с этими запросами, но мне кажется, что я действительно борюсь с этим.
Вот что у меня есть до сих пор
SELECT
*,
`additionEndDate`,
GREATEST(COALESCE(`projectEndDate`, 0),
COALESCE(`additionEndDate`, 0)) AS `realEndDate`
FROM
(SELECT
*
FROM
`projects`
WHERE
`projectStatus` = ‘Active’) AS A
LEFT JOIN
(SELECT
*
FROM
`additions`
WHERE
`additionEndDate` IS NOT NULL
GROUP BY `projects_projectId`
ORDER BY `additionEnteredDate` DESC) AS B ON A.projectId = B.projects_projectId
ORDER BY `realEndDate`
Результат не получает последнее добавлениеEnteredDate, а вместо этого кажется получить первую запись только в дополнениях.
РЕДАКТИРОВАТЬ: Вот пример проекта и 4 примера дополнений, связанных с этим проектом
Приведенный выше запрос приводит к realClosingDate
от 2020-02-12, однако требуемый результат должен быть 2020-02-22, так как это последнее введенное добавление, но не обязательно МАКС () additionEndDate