Semaine 34 - SQL & Techniques de Requêtes

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
level_7 is always the 'last known value'

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)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)

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é.

Previous
Previous

Semaine 35 - intermédiaire

Next
Next

Semaine 34 - intermédiaire