窗口函数 RANK()、DENSE_RANK() 等的特殊情况

Posted

技术标签:

【中文标题】窗口函数 RANK()、DENSE_RANK() 等的特殊情况【英文标题】:Particular Case of Window Functions RANK(), DENSE_RANK() , etc 【发布时间】:2022-01-04 01:32:00 【问题描述】:

我希望获得与每个Email 关联的最后三个Tax Numbers,按Created Date 列排序。 例如:

Email           Tax N°  Created Date    Rank
dam_10@o.com    708157054   27-09-16    1
dam_10@o.com    708157054   27-09-16    1
dam_10@o.com    21714574    27-08-16    2
dam_10@o.com    21714574    27-08-16    2
dam_10@o.com    21714574    27-08-16    2
dam_10@o.com    21714574    27-08-16    2
dam_10@o.com    21714574    24-08-16    2
dam_10@o.com    20222011877 04-08-15    3
dam_10@o.com    20222011877 04-08-15    3
dam_10@o.com    33546663669 28-08-13    4
dam_10@o.com    30523312398 28-08-13    5
dam_10@o.com    30523312398 28-08-13    5
est_20@r.com    123722900   28-08-13    1
est_20@r.com    512381112   28-08-13    2

我尝试使用窗口函数DENSE_RANK(),但我无法调试Created Date不同但Tax Number相同的情况:

DENSE_RANK() OVER (PARTITION BY M.[Email] ORDER BY A.[Created Date] DESC, A.[Tax Number] DESC) AS [Ranking]

It should be Rank 2

【问题讨论】:

【参考方案1】:

我先用下面的函数解决了MAX(A.[Created Date]) OVER (PARTITION BY [Email], [Tax Number]) AS [Last Created Date]

【讨论】:

以上是关于窗口函数 RANK()、DENSE_RANK() 等的特殊情况的主要内容,如果未能解决你的问题,请参考以下文章

窗口函数rank, dense_rank, row_number的区别

mysql窗口函数rank() over、dense_rank() over、row_number() over 使用心得

Mysql8.0出现的窗口函数row_number(),rank(),dense_rank()用于排序的查询

MySql窗口函数

使用MySQL会话变量实现窗口函数

在 dplyr 窗口函数中使用多列?