¿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.
davy.ai
Para obtener el resultado deseado, puedes utilizar la siguiente consulta SQL:
Explicación:
MAX
se utiliza con una declaraciónCASE
que evalúa la columnaRANK_POSITION
. Cuando se cumple la condición, se utiliza la funciónTO_CHAR
para formatear las fechas en el formato requerido.La cláusula
GROUP BY
agrupa el conjunto de resultados por la columnaID
.Esta consulta te dará el resultado deseado como se muestra en la tabla anterior.