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.

¿Existe alguna forma de agrupar valores obteniendo solo aquellos que cumplen una cierta condición?

Estoy tratando de escribir una consulta en Oracle SQL que agrega valores por algunos IDs, donde tengo la siguiente tabla como entrada:

ID FECHA POSICIÓN_RANGO
301 20211201 1
301 20211202 2
301 20211203 3
649 20211201 1
649 20211202 2
649 20211206 3
649 20211208 4
649 20211211 5
758 20211212 1
758 20211222 2

Y quiero obtener algo como esto:

ID FECHA_PRIMERO_EN_RANGO FECHA_SEGUNDO_EN_RANGO
301 01/12/2021 02/12/2021
649 01/12/2021 02/12/2021
758 12/12/2021 22/12/2021

Donde FECHA_PRIMERO_EN_RANGO es la fecha que es la primera en POSICIÓN_RANGO para el ID, y FECHA_SEGUNDO_EN_RANGO es la fecha que ocupa el segundo lugar en POSICIÓN_RANGO para el ID específico.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, puedes utilizar la siguiente consulta SQL:

    SELECT 
        ID,
        MAX(CASE WHEN RANK_POSITION = 1 THEN TO_CHAR(SOME_DATE, 'DD/MM/YYYY') END) AS FECHA_PRIMERO_EN_RANGO,
        MAX(CASE WHEN RANK_POSITION = 2 THEN TO_CHAR(SOME_DATE, 'DD/MM/YYYY') END) AS FECHA_SEGUNDO_EN_RANGO
    FROM 
        nombre_tabla
    GROUP BY 
        ID
    

    Explicación:

    1. La función MAX se utiliza con una declaración CASE que evalúa la columna RANK_POSITION. Cuando se cumple la condición, se utiliza la función TO_CHAR para formatear las fechas en el formato requerido.
    2. La cláusula GROUP BY agrupa el conjunto de resultados por la columna ID.

    Esta consulta te dará el resultado deseado como se muestra en la tabla anterior.

Comments are closed.