Hola muchacho buen día.
Haciendo unos selects me tope con un requerimiento que me ha quebrado la cabeza y es el siguiente:
Tengo una columna COL1 que tiene valores numéricos, estos valores pueden ser iguales y de repente cambiar como se ve en la tabla de ejemplo. La cosa es que cada vez que cambie el valor de la columna COL1 debo cambiar el valor de otra columna auxiliar y mantener el valor hasta que vuelva a cambiar, pero este valor solo debe ser 0 ó 1 y en su defecto 'S' o 'N'. Lo que he logrado es detectar cuando la columna cambia pero no puedo retener el valor y cambiarlo hasta un nuevo cambio. He usado la función analítica LAG y LEAD pero no lo logro. Llevo un buen rato.
Esta es la tabla con la columna COL1 que tiene los valores persistentes, la columna CAMBIOS donde detecto los cambios y la columna TEST_COL que es a donde quiero llegar.
COL1 CAMBIOS TEST_COL
---------- ------------- ---------------
2 N 0
3 Y 1
3 N 1
3 N 1
4 Y 0
4 N 0
9 Y 1
Este es el query con el que he estado intentando pero no logro nada
SELECT 2 col1, 3 col2 FROM dual UNION ALL
SELECT 3 col1, 6 col2 FROM dual UNION ALL
SELECT 3 col1, 7 col2 FROM dual UNION ALL
SELECT 3 col1, 7 col2 FROM dual UNION ALL
SELECT 4 col1, 7 col2 FROM dual UNION ALL
SELECT 4 col1, 7 col2 FROM dual UNION ALL
SELECT 9 col1, 9 col2 FROM dual
)
-- end of sample_data mimicking real table
select col1, cambios, '' test_col from(
| select col1, decode(col1, LAG(col1,1, col1) OVER (ORDER BY col1),'N','Y') cambios | |
FROM sample_data);
Saludos muchachos y muchas gracias.