Hora de ayudar a nuestro Supercontable
DataSuperHero Inc. está intentando conectarse a uno de sus almacenes de datos pero, lamentablemente, los datos que han salido están estructurados de forma diferente a como le gustaría a Supercontable («¿A quién llamas cuando llega la temporada de impuestos?»).
Los datos con los que empezamos están estructurados con un sistema padre-hijo, pero hay algunas advertencias:
- La profundidad del hijo/padre varía en la estructura, pero se da para cada «cadena».
- Si el código no tiene ningún hijo, el indicador «lowest_level» se pone a 1.
- La profundidad máxima en todo el sistema es 7
- Hay un valor valid_from y valid_until. Hay que compararlo con la fecha actual.
Lo que a Supercontable le gustaría ver es lo siguiente :
- utilizando columnas llamadas «level_1», «level_2» etc. construir los datos de tal manera que una sola cadena se muestre en una sola línea
- Si un código no tiene 7 niveles, rellenar los niveles que faltan con el último valor conocido
- La tabla final sólo debe tener filas de datos que utilicen cadenas «terminadas». No es necesario mostrar una fila por cada paso de la cadena.
Ayuda visual para el resultado final :
El código para empezar:
create or replace table start_data(
code VARCHAR
, code_parent VARCHAR
, valid_until DATE
, valid_from DATE
, is_lowest_level BOOLEAN
, max_level INTEGER
)
as
select * from values
('CC0193','EBGABA','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',1,7)
, ('CC0194','EBGABA','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',1,7)
, ('EBGABA','EBGAB','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,7)
, ('EBGAB','EBGA','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,7)
, ('EBGA','EBG','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,7)
, ('EBG','EB','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,7)
, ('EB','ZZ','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,7)
, ('ZZ',NULL,'9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,7)
, ('7050307','CC','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',1,3)
, ('CC','A1','9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,3)
, ('A1',NULL,'9999-01-01 00:00:00.000','1950-01-01 00:00:00.000',0,3)
;
Recuerda que si deseas participar:
- Regístrate como miembro de Frosty Friday. Puedes hacerlo haciendo clic en la barra lateral y luego yendo a «REGISTRARSE» (ten en cuenta que unirte a nuestra lista de correo no te proporcionará una cuenta de Frosty Friday).
- Publica tu código en GitHub y asegúrate de que sea de acceso público (consulta nuestra guía si no sabes cómo hacerlo).
- Publica la URL en los comentarios del desafío.
Si tienes alguna pregunta técnica que te gustaría plantear a la comunidad, puedes hacerlo aquí, en nuestro hilo dedicado a estos retos.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.