对记录进行排序后使用密集排名
Posted
技术标签:
【中文标题】对记录进行排序后使用密集排名【英文标题】:Using dense rank after sorting the records 【发布时间】:2018-09-27 18:32:27 【问题描述】:在使用 sql 中的密集秩函数时我需要一些帮助
我在表中有以下数据,
我想根据 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))))) ;
我想实现以下目标。
有人可以帮我查询一下吗。
感谢您的宝贵时间!!
【问题讨论】:
正确标记!!! mysql 甲骨文。这是哪一个? @Eric,抱歉是 Sql。SQL
只是一种语言。哪个dbms?甲骨文?数据库服务器? MySQL? Postgres?
@Eric 我正在使用 Oracle
【参考方案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;
【讨论】:
嗨,戈丹,非常感谢。正是我需要的。非常感谢您的帮助。以上是关于对记录进行排序后使用密集排名的主要内容,如果未能解决你的问题,请参考以下文章
Oracle:row_number()rank()dense_rank()