Semana 34 - SQL y Técnicas de Consulta
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 :
create or replace table start_data( code VARCHAR , code_parent VARCHAR , valid_until DATE , valid_from DATE , is_lowest_level BOOLEAN , max_level INTEGER)asselect * 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.