对记录排序后使用密集等级

时间:2018-09-27 18:32:27

标签: sql oracle window-functions

在sql中使用密集排序功能时,我需要一些帮助

我在表中有以下数据,

enter image description here

我想基于CREATED DATE列对记录进行排序,然后分配相同的行号 如果多个记录的文档ID相同。我使用了以下查询,但行号未排序

 SELECT * FROM (((SELECT * FROM (SELECT   DENSE_RANK() OVER(order by VC_VIN_DOCUMENT_ID) AS "RowNumber",
VC_VIN_DOCUMENT_ID,VC_VIN_LOCALE,VC_VIN_IMDOC_CREATE_DATE,VC_VIN_CARLINE_CODE,VC_VIN_DOCUMENT_TYPE
from (SELECT DISTINCT VC_VIN_IMDOC_CREATE_DATE,VC_VIN_DOCUMENT_TYPE, VC_VIN_LOCALE,VC_VIN_DOCUMENT_ID,VC_VIN_CARLINE_CODE from OK_DC.GMS3_VC_MME_VIN_SI_DETAIL ORDER BY VC_VIN_IMDOC_CREATE_DATE DESC)))))  ;

我想实现以下目标。

enter image description here

有人可以帮助我进行查询。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

您可以分两步执行此操作。首先是获取创建日期。然后分配行号:

select vsd.*,
       dense_rank() over (order by max_cd desc, VC_VIN_DOCUMENT_ID) as rowNumber
from (select vsd.*,
             MAX(vsd.VC_VIN_IMDOC_CREATE_DATE) over (partition by vscd.VC_VIN_DOCUMENT_ID) as max_cd
      from OK_DC.GMS3_VC_MME_VIN_SI_DETAIL vsd
     ) vsd;