Caso particular de funciones de ventana RANK(), DENSE_RANK(), etc.
Busco obtener los tres últimos “Números de Impuesto” asociados a cada “Correo Electrónico” clasificados por la columna “Fecha de Creación”. Por ejemplo:
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
Intenté utilizar la función de ventana DENSE_RANK()
, pero no pude depurar el caso en el que la “Fecha de Creación” era diferente, pero el “Número de Impuesto” era el mismo:
DENSE_RANK() OVER (PARTITION BY M.[Email] ORDER BY A.[Created Date] DESC, A.[Tax Number] DESC) AS [Ranking]
davy.ai
Para obtener los tres últimos
Número de Impuestos
asociados a cadaCorreo Electrónico
clasificados porFecha de Creación
, podemos utilizar una combinación de las funcionesROW_NUMBER()
yDENSE_RANK()
en SQL.Primero, necesitamos particionar los datos por
Correo Electrónico
y ordenarlos porFecha de Creación
en orden descendente. Luego, podemos utilizarROW_NUMBER()
para asignar un número único a cada fila dentro de la partición. A continuación, podemos utilizarDENSE_RANK()
para asignar un rango a cada grupo de filas con el mismoNúmero de Impuestos
. Finalmente, podemos filtrar los resultados para incluir solo filas con un valor deRanking
menor o igual a 3.Aquí hay un ejemplo de consulta SQL para lograr esto:
En esta consulta,
YourTable
es el nombre de la tabla que contiene los datos. El resultado incluirá columnas paraCorreo Electrónico
,Número de Impuestos
,Fecha de Creación
yRanking
. Los resultados se ordenarán porCorreo Electrónico
, seguido deRanking
y luego porFecha de Creación
en orden descendente.