对记录进行排序后使用密集排名

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;

【讨论】:

嗨,戈丹,非常感谢。正是我需要的。非常感谢您的帮助。

以上是关于对记录进行排序后使用密集排名的主要内容,如果未能解决你的问题,请参考以下文章

mysql分组排序后取出几条记录,

Oracle:row_number()rank()dense_rank()

MySql中row_number()rank()dense_rank() 的区别

排序——冒泡排序

排序之冒泡排序

SQL中表中字段筛选后排序,然后进行排名。 在线等!!!