SQL 使用大小写使用多列排序

SQL order by using multiple columns using case

Table:

NUMBER DETAIL_ID,
Date schdeuledDate;
Date completedDate;
NUMBER recordId;

我正在尝试实现这一点,检索最近完成日期的记录,如果为空,则为最近的预定日期,如果检索到多个记录,则使用更高的 recordId。

SELECT DETAIL_ID,completedDate,schdeuledDate,recordId FROM table
ORDER BY CASE completedDate WHEN NULL THEN schdeuledDate ELSE completedDate END,DETAIL_ID,recordId DESC;

但这就是我从上面的查询中得到的

Detail_ID  compdate     schdate    recordId
318        08-AUG-16    15-AUG-16   22342
318        06-JUN-18    22-AUG-18   26219
318        22-AUG-17    08-AUG-17   26218
418        null         08-AUG-17   26450
418        22-AUG-17    22-AUG-18   26879
418        22-AUG-17    22-AUG-18   26779 

预计:

318        06-JUN-18    22-AUG-18   26219
418        22-AUG-17    22-AUG-18   26879

我想你想要 row_number():

select t.*
from (select t.*,
             row_number() over (partition by detail_id
                                order by coalesce(schdeuledDate, completedDate) desc, recordId desc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;