es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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]

Debería ser el Rango 2

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener los tres últimos Número de Impuestos asociados a cada Correo Electrónico clasificados por Fecha de Creación, podemos utilizar una combinación de las funciones ROW_NUMBER() y DENSE_RANK() en SQL.

    Primero, necesitamos particionar los datos por Correo Electrónico y ordenarlos por Fecha de Creación en orden descendente. Luego, podemos utilizar ROW_NUMBER() para asignar un número único a cada fila dentro de la partición. A continuación, podemos utilizar DENSE_RANK() para asignar un rango a cada grupo de filas con el mismo Número de Impuestos. Finalmente, podemos filtrar los resultados para incluir solo filas con un valor de Ranking menor o igual a 3.

    Aquí hay un ejemplo de consulta SQL para lograr esto:

    SELECT Email, [Número de Impuestos], [Fecha de Creación], Ranking
    FROM (
      SELECT Email, [Número de Impuestos], [Fecha de Creación],
        ROW_NUMBER() OVER (PARTITION BY Email ORDER BY [Fecha de Creación] DESC) AS RowNum,
        DENSE_RANK() OVER (PARTITION BY Email, [Número de Impuestos] ORDER BY [Fecha de Creación] DESC) AS Ranking
      FROM YourTable
    ) AS T
    WHERE RowNum <= 3 AND Ranking <= 3
    ORDER BY Email, Ranking, [Fecha de Creación] DESC
    

    En esta consulta, YourTable es el nombre de la tabla que contiene los datos. El resultado incluirá columnas para Correo Electrónico, Número de Impuestos, Fecha de Creación y Ranking. Los resultados se ordenarán por Correo Electrónico, seguido de Ranking y luego por Fecha de Creación en orden descendente.

Comments are closed.