You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL多datetime列排序问题:如何按任一最新日期优先排序?

解决方法

你原SQL的排序逻辑有问题:它会优先按r_closed列降序排列,只有当两行的r_closed日期完全相同时,才会对比sfh_regeneratedon列。这就导致如果某行的sfh_regeneratedon是最新的,但r_closed日期较旧,它会被排在后面,不符合你“只要其中一列日期最新就排顶部”的需求。

你需要以两列中的最大日期值作为排序依据,不同数据库的实现方式略有差异:

1. 支持GREATEST函数的数据库(MySQL、Oracle、PostgreSQL等)

直接取两列的最大值进行降序排序:

select *
from v_ServiceHistory
where r_customer = 80
order by GREATEST(r_closed, sfh_regeneratedon) desc;

2. SQL Server(无GREATEST函数,用IIF或CASE)

用IIF函数判断哪个日期更大:

select *
from v_ServiceHistory
where r_customer = 80
order by IIF(r_closed > sfh_regeneratedon, r_closed, sfh_regeneratedon) desc;

或者用兼容性更强的CASE语句:

select *
from v_ServiceHistory
where r_customer = 80
order by 
    CASE 
        WHEN r_closed > sfh_regeneratedon THEN r_closed 
        ELSE sfh_regeneratedon 
    END desc;

额外说明

如果某列存在NULL值,需要用COALESCE将NULL替换为一个极小值(比如'1900-01-01'),避免NULL影响最大值计算。以MySQL为例:

select *
from v_ServiceHistory
where r_customer = 80
order by GREATEST(COALESCE(r_closed, '1900-01-01'), COALESCE(sfh_regeneratedon, '1900-01-01')) desc;

内容的提问来源于stack exchange,提问作者kunal verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:52:04