Я пытаюсь выбрать отдельные строки по следующим двум правилам:
- Если его дата delete_at равна нулю, то это самая последняя запись, выберите ее
- Если этосамая поздняя дата удаленных_откатов (и нет записи с NULL), это также самая последняя запись, выберите ее
Рассмотрите эту таблицу:
Результат, который я ищу, будет:
Я использую MySQL mariaDB v10.1.33, которая делаетне все функции, которыми я пользуюсь.
NULL игнорировался, поэтому я использую coalesce(fc.deleted_at, CURRENT_TIMESTAMP())
, чтобы сделать его самой последней датой.Таким образом, я могу использовать функцию max (), чтобы выбрать его.Однако когда я использую это, это не соответствует данным в строках!то есть это:
SELECT max(coalesce(fc.deleted_at, CURRENT_TIMESTAMP())), folder_id, code
FROM folder_code fc
WHERE fc.folder_id = 5683
возвращает:
Я немного читал, и это распространенная проблема, где, кажется,упорядочение и выбор максимума каждого столбца независимо от строки, с которой он связан, и есть предложения использовать группирование по порядку для его преодоления.Однако, когда я делаю это, я получаю тот же результат, то есть он возвращает то же, что и выше:
SELECT max(coalesce(fc.deleted_at, CURRENT_TIMESTAMP())) as maxdeleteddate, fc.folder_id, fc.code
FROM folder_code fc
WHERE fc.folder_id = 5683
GROUP BY fc.folder_id
ORDER BY maxdeleteddate desc
Как мне достичь желаемого результата?
Спасибо