2015-11-18 3 views
0

У меня есть таблица с идентификатором и 2 даты и времени полей с более чем 2000 строк:SQL выбрать самые последние даты несколько столбцов

Пример:

id created_at   updated_at 
1 2015-07-07 13:39:38 NULL 
2 2015-08-06 14:09:14 2015-11-18 10:20:55 
3 2015-08-07 11:01:48 2015-11-12 16:43:11 
... 

Как я могу получить список отсортированных по самым последним Дата и время?

Order by updated_at DESC, created_at DESC дает мне неправильный результат. Он заказывает updated_at, а затем created_at и не дает ожидаемого результата.

Я также пробовал несколько решений с CASE WHEN, но это не сработало для меня.

Правильно отсортированный список для примера:

id created_at   updated_at 
1 2015-08-06 14:09:14 2015-11-18 10:20:55 
2 2015-08-07 11:01:48 2015-11-12 16:43:11 
3 2015-07-07 13:39:38 NULL 
... 
+1

Последнее, что? Из created_at или update_at или последних из этих двух значений? – jarlh

+0

Последнее из обоих :) – tR4xX

ответ

3

Попробуйте GREATEST

http://www.w3resource.com/mysql/comparision-functions-and-operators/greatest-function.php

ORDER BY GREATEST(created_at, update_at) DESC 

EDIT

Вы должны проверить, как обращаться с пустым. Я думаю, используя 0 или, возможно, использовать дату по умолчанию '1900-1-1', пожалуйста, проверьте ее.

ORDER BY GREATEST(
        COALESCE(created_at, 0), 
        COALESCE(update_at, 0) 
       ) DESC 
+0

Конечно, БОЛЬШОЙ путь. – jarlh

+0

@jarlh жаль плохое написание: $ –

+0

Спасибо, что сработало для меня :) – tR4xX

0

Что-то вроде этого может быть?

select * 
from tablename 
order by case when created_at is null or created_at < update_at then update_at 
       else created_at end desc 

Если created_at является NULL или created_at находится перед update_at, то update_at является самым последним. В противном случае created_at является самым последним. Заказ по этому значению desc.

Это также работает для dbms-продуктов без функции MySQL GREATEST. Если вы работаете с MySQL, проверьте ответ Хуана Карлоса Оропезы вместо этого.