我有一个带有id的表和2个超过2000行的datetime字段:
示例:
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
...
答案 0 :(得分:3)
尝试GREATEST
http://www.w3resource.com/mysql/comparision-functions-and-operators/greatest-function.php
ORDER BY GREATEST(created_at, update_at) DESC
修改强>
你应该检查如何处理null。我想使用0
或者使用默认日期'1900-1-1'
,请测试一下。
ORDER BY GREATEST(
COALESCE(created_at, 0),
COALESCE(update_at, 0)
) DESC
答案 1 :(得分: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是最新的。按该值排序。
这也适用于没有MySQL GREATEST
功能的dbms产品。如果运行MySQL,请查看Juan Carlos Oropeza的答案,而不是这个。