Элементы заказа Mysql по новейшей из двух дат

У меня есть таблица с двумя датами - ADDDATE и UPDATEDATE.
Когда элемент добавляется, ADDDATE - текущая дата, а UPDATEDATE - 0000-00-00.

Мне нужно ORDER BY команду SQL и получить наилучшую дату для них. 2. Например, если ADD = 12/1/2010 и UPDATE = 30/6/2010, UPDATE DATE является лучшим (новейшим).

Любые советы?

Ответ 1

Используйте GREATEST, чтобы найти самую новую дату:

ORDER BY GREATEST(UPDATEDATE, ADDDATE)

Ответ 2

 ORDER BY IF(UPDATEDATE > ADDDATE, UPDATEDATE, ADDDATE)

Ответ 3

Если вы хотите сделать вашу базу данных масштабируемой, лучшим подходом будет добавить новый столбец LATESTDATE вместе с триггером вставки/обновления, который устанавливает его в самое последнее из двух полей-кандидатов, используя, например, наибольший.

Запуск отдельных функций на ваших выборках очень быстро замедляется по мере увеличения таблицы. Если вы хотите, чтобы производительность оставалась работоспособной по мере роста таблицы, этот прием часто встречается.

Это технически нарушает 3NF, поскольку дублирует одну из дат, но нарушение допустимо по соображениям производительности, и вы все еще поддерживаете свойства ACID, потому что триггеры диктуют, что столбцы остаются согласованными.

Я не знаю синтаксиса триггера MySQL, но я бы сделал что-то вроде:

  • Создайте новый столбец, установив для него подходящее значение по умолчанию.
  • Создайте триггеры вставки/обновления, чтобы гарантировать, что изменения будут отражены.
  • Прикоснитесь ко всем строкам с помощью запроса типа update TBL set ADDDATE = ADDDATE чтобы триггер update TBL set ADDDATE = ADDDATE для всех текущих строк.

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

Имейте в виду, что это может быть необязательно, если размер вашей таблицы относительно мал - я работаю в средах, где таблицы действительно огромны.