SQL选择最近的日期多列

时间:2015-11-18 14:57:53

标签: php mysql sql select zend-framework

我有一个带有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
...

2 个答案:

答案 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的答案,而不是这个。