我有一个包含2个日期列的表:
create_date
和modify_date
。
始终设置create_date
并且有时modify_date
。
现在我想用两个具有相同优先级的查询来命令我的查询。
如果我这样做:
order by create_date desc, modify_date desc
我首先获取按create_date
排序的所有行,然后按modify_date
排序,但我希望两行按相同的优先级排序。我需要这个:
create_date | modify_date
2011-12-31 | -
2011-12-01 | 2011-12-30
2011-12-29 | -
答案 0 :(得分:5)
select *
from yourtable
order by coalesce(modify_date, create_date) desc
答案 1 :(得分:3)
使用ISNULL()
按modify_date
排序,如果modify_date
为NULL
,则会使用create_date
值:
ORDER BY ISNULL(modify_date, create_date) DESC
答案 2 :(得分:0)
列命名意味着modify_date未设置或高于创建日期,因此其他答案将起作用。如果没有,您可以使用描述为here的用户定义函数(调整为使用日期而不是int)。然后使用
ORDER BY dbo.HigherArgument(create_date, modify_date) DESC