Как я могу забить результаты по максимуму из двух дат? - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть две таблицы: 1. таблица вопросов, в которую входят: question_id, date, more data 2. таблица соединений: connection_id, question_id, connection_date, more data

У меня есть следующая объединенная таблица question_id, question_date,Идентификатор соединения, дата соединения оставлена ​​присоединенной к вопросу.Таким образом, у меня есть несколько строк с датой подключения, а некоторые с NULL (при отсутствии соответствующего подключения)

Ниже приведен пример данных:

question_id | question_date | connection_id | connection_date
500         | 28-10-2018    |  7            |  22-12-2018
501         | 29-10-2018    |  NULL         |  NULL
505         | 01-11-2018    |  8            |  10-12-2018
506         | 05-11-2018    |  9            |  02-12-2018 
507         | 07-12-2018    |  NULL         |  NULL

Мне нужно, чтобы таблица результатов была отсортирована побольшее из двух значений connection_date & question_date, поэтому результат будет:

question_id | question_date | connection_id | connection_date
500         | 28-10-2018    |  7            |  22-12-2018
505         | 01-11-2018    |  8            |  10-12-2018
507         | 07-12-2018    |  NULL         |  NULL
506         | 05-11-2018    |  9            |  02-12-2018 
501         | 29-10-2018    |  NULL         |  NULL

Как я могу добиться этого, используя только mysql?

1 Ответ

0 голосов
/ 25 ноября 2018

Сортировка с использованием GREATEST:

SELECT question_id, question_date, connection_id, connection_date
FROM yourTable
ORDER BY GREATEST(question_date, COALESCE(connection_date, question_date)) DESC;

Для объяснения того, почему используется COALESCE, в случае, если connection_date be NULL, мы игнорируем его и используем только question_date.В этом ответе предполагается, что question_date никогда не будет NULL.

На основании комментария @strawberry, если вы сохраняете свои даты в виде текста, то нам придется сделать дополнительный вызов STR_TO_DATE:

SELECT question_id, question_date, connection_id, connection_date
FROM yourTable
ORDER BY
    GREATEST(STR_TO_DATE(question_date, '%d-%m-%Y'),
             COALESCE(STR_TO_DATE(connection_date, '%d-%m-%Y'),
                      STR_TO_DATE(question_date, '%d-%m-%Y'))) DESC;

Пожалуйста, не храните даты в виде текста, а вместо этого используйте правильный столбец даты.

...