SQL select 最近日期多列
SQL select most recent date multiple columns
我有一个 table,其中包含一个 ID 和 2 个超过 2000 行的日期时间字段:
示例:
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
...
尝试GREATEST
http://www.w3resource.com/mysql/comparision-functions-and-operators/greatest-function.php
ORDER BY GREATEST(created_at, update_at) DESC
编辑
您应该检查如何处理空值。我想使用 0
或者可能使用默认日期 '1900-1-1'
请测试一下。
ORDER BY GREATEST(
COALESCE(created_at, 0),
COALESCE(update_at, 0)
) DESC
也许是这样的?
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.
排序
这也适用于没有 MySQL 的 GREATEST
功能的 dbms 产品。如果 运行 MySQL,请查看 Juan Carlos Oropeza 的回答而不是这个。
我有一个 table,其中包含一个 ID 和 2 个超过 2000 行的日期时间字段:
示例:
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
...
尝试GREATEST
http://www.w3resource.com/mysql/comparision-functions-and-operators/greatest-function.php
ORDER BY GREATEST(created_at, update_at) DESC
编辑
您应该检查如何处理空值。我想使用 0
或者可能使用默认日期 '1900-1-1'
请测试一下。
ORDER BY GREATEST(
COALESCE(created_at, 0),
COALESCE(update_at, 0)
) DESC
也许是这样的?
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.
排序这也适用于没有 MySQL 的 GREATEST
功能的 dbms 产品。如果 运行 MySQL,请查看 Juan Carlos Oropeza 的回答而不是这个。