Il est temps d’aider notre super-comptable
DataSuperHero Inc. essaie de se connecter à l’un de ses data stores, mais malheureusement, les données générées sont structurées différemment de ce que Super Comptable attendait.
Les données avec lesquelles nous commençons sont structurées avec un système parent-enfant mais il y a quelques mises en garde :
La profondeur enfant/parent varie au niveau de la structure, mais est donnée pour chaque « chaîne »
Si le code n’a pas d’enfant, le flag ‘lowest_level’ est mis à 1
La profondeur la plus élevée de tout le système est de 7
Il existe une valeur valid_from et valid_until. Vous devez les comparer à la date d’aujourd’hui
Ce que SuperAccountant aimerait voir est le résultat suivant:
en utilisant des colonnes appelées « level_1 », « level_2 », etc. construisez les données de telle manière qu’une seule chaîne soit affichée sur une seule ligne
Si un code n’a pas 7 niveaux, remplissez les niveaux manquants avec la dernière valeur connue
La table de fin ne doit contenir que des lignes de données utilisant des chaînes « terminées ». Vous n’avez pas besoin d’afficher une ligne pour chaque étape de la chaîne
Aide visuelle pour le résultat final :
Level_1 | level_2 | level_3 | level_4 | level_5 | level_6 | level_7 |
ZZ | EB | EBG | EBGA | EBGAB | EBGABA | CC0194 |
ZZ | EB | EBG | EBGA | EBGAB | EBGABA | CC0193 |
A1 | CC | 7050307 | 7050307 | 7050307 | 7050307 | 7050307 |
Le code de démarrage est:
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)
Et n’oubliez pas, si vous souhaitez participer aux défis:
1. Inscrivez-vous en tant que membre de Frosty Friday. –> Vous pouvez le faire en cliquant sur la barre latérale, puis en cliquant sur ‘REGISTER‘ (notez que s’inscrire à notre liste de diffusion ne vous donne pas de compte Frosty Friday).
2. Publiez votre code sur GitHub et rendez-le accessible au public (consultez notre guide si vous ne savez pas comment faire, disponible ici)
3. Postez l’URL dans les commentaires du défi.
Si vous avez des questions techniques que vous souhaitez poser à la communauté, vous pouvez les poser ici, sur notre thread dédié.
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.