Semana 34 – Intermedio

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 :

A white grid with black textDescription automatically generated
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:

  1. 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).
  2. 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).
  3. 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.

Previous
Previous

Semana 33 - Administración

Next
Next

Semana 31 - SQL y Técnicas de Consulta