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;
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;