MySQL выбирает самое последнее из нескольких столбцов

У меня есть таблица с несколькими столбцами даты, ниже приведен пример столбцов моей таблицы: 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. Я думаю, мне нужен вложенный выбор здесь, но я не могу понять его логику. Я надеюсь, что здесь кто-то может указать мне правильное направление.

Серьезно подумайте о пересмотре схемы. Каждый раз, когда вы обнаруживаете пронумерованные столбцы (скажем, 2 выше), вы можете быть уверены, что ваш дизайн не оптимален.

Strawberry 01.05.2018 17:13

Мой ответ не распространяется на комментарий Strawberry, поскольку он просто напрямую отвечает на вопрос, но да ... даже всего 2 пронумерованных поля являются признаком плохой схемы ... В зависимости от того, что вы пытаетесь сделать, я бы предложил вы убедитесь, что ваша схема хороша. Например, если ваши 3 даты относятся к разным типам дат, например, может быть крайний срок для чего-то ... и дата, когда это было фактически сделано, и вы можете захотеть вытащить самую последнюю из двух дат . Если, однако, это буквально то же самое логическое значение, которое вы просто хотите сохранить 3 из них ... это бесполезно!

Mathieu Turcotte 01.05.2018 17:30

Спасибо - таблица, которую я использовал, является всего лишь примером. Таблица на самом деле является таблицей tmp, созданной из другого запроса

Ross 03.05.2018 10:08
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пробовали функцию Greatest ()?

Вот краткий пример:

SELECT
    userId,
    greatest(dt1, dt2, dt3)
FROM testTbl;

Вероятно, вы пробовали использовать функцию Max (), как и в большинстве языков программирования. Однако в SQL Max - это функция агрегирования. Вы можете указать в нем только одно поле, и оно вернет самое большое значение в этом столбце, сгруппированное по тому, что группирует ваша GROUP BY.

Функция Greatest () в mySQL является эквивалентом функции Max () из большинства других языков.

Другие вопросы по теме