У меня есть таблица с несколькими столбцами даты, ниже приведен пример столбцов моей таблицы: tbl.user_id
, tbl.date_1
, tbl.date_2
, tbl.date_3
Мне нужно придумать запрос, который вернет user_id
и most_recent_date
, где большинство most_recent_date
- это самая последняя дата между date_1, date_2 и date_3. Я думаю, мне нужен вложенный выбор здесь, но я не могу понять его логику. Я надеюсь, что здесь кто-то может указать мне правильное направление.
Мой ответ не распространяется на комментарий Strawberry, поскольку он просто напрямую отвечает на вопрос, но да ... даже всего 2 пронумерованных поля являются признаком плохой схемы ... В зависимости от того, что вы пытаетесь сделать, я бы предложил вы убедитесь, что ваша схема хороша. Например, если ваши 3 даты относятся к разным типам дат, например, может быть крайний срок для чего-то ... и дата, когда это было фактически сделано, и вы можете захотеть вытащить самую последнюю из двух дат . Если, однако, это буквально то же самое логическое значение, которое вы просто хотите сохранить 3 из них ... это бесполезно!
Спасибо - таблица, которую я использовал, является всего лишь примером. Таблица на самом деле является таблицей tmp, созданной из другого запроса
Вы пробовали функцию Greatest ()?
Вот краткий пример:
SELECT
userId,
greatest(dt1, dt2, dt3)
FROM testTbl;
Вероятно, вы пробовали использовать функцию Max (), как и в большинстве языков программирования. Однако в SQL Max - это функция агрегирования. Вы можете указать в нем только одно поле, и оно вернет самое большое значение в этом столбце, сгруппированное по тому, что группирует ваша GROUP BY.
Функция Greatest () в mySQL является эквивалентом функции Max () из большинства других языков.
Серьезно подумайте о пересмотре схемы. Каждый раз, когда вы обнаруживаете пронумерованные столбцы (скажем, 2 выше), вы можете быть уверены, что ваш дизайн не оптимален.