Bonjour,
Je commence avec Teradata et j'ai cet exercice ci-dessous, j'ai essayé de le résoudre (en utilisant des tables volatiles) mais je suis toujours à la première partie de la partie 1: (sans Bteq)
sélectionnez les lignes de table_a satisfaisant toutes la condition:
- c6 is null
On ne garde qu'une seule ligne par tuple suivant: c1, c2, c3, Année / mois / jour de la date (on prend la ligne avec max date et si nécessaire avec max id). Les lignes sont ensuite triées sur ce tuple par ordre croissant de date.
1- Pour chaque première ligne sélectionnée du triplet c1 / c2 / c3, s'il y a une ligne dans table_b qui satisfait toutes les conditions suivantes:
Donc si le champ c5 est identique On passe à la ligne suivante du triplet (si elle existe)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 a.c1 = b.c1 and a.c2 = b.c2 and a.c3 = b.c3 and b.dat_fin = '2999-12-31'
sinon (le champ c5 n'est pas identique) on ferme la ligne de table_b comme suit:
b.date_fin = a.DATe - 1 jour
et loading_date = current_timestamp (0)
Et nous insérons une ligne dans table_b (règles spécifiées après, cas 1)
Sinon (il n'y a pas de ligne dans table_b qui satisfait à la condition 2)
On insère la ligne dans table_b (règles spécifiées après, cas 1).
2-Pour les n lignes suivantes du triplet c1 / c2 / c3 éventuellement existant,
si la différence entre Ln-1.date et Ln.date est strictement supérieure à 1 mois alors le champ date = Ln-1.date + 1 mois (date) pour la ligne insérée dans table_b à partir de Ln-1 (insertion case2)
et une ligne est insérée à partir de Ln (insertion du cas 1). Ensuite, nous retournons à la ligne suivante du même triplet et nous jouons à nouveau le même algorithme. Si non
s'il n'y a pas de différence sur le champ c5, on va passer à la ligne suivante pour le même triplet et on fait le même algorithme
s'il y a une différence sur c5 alors le champ b.DAT_FIN = Ln.date - 1 jour (date) pour la ligne précédemment insérée dans le tableau b pour le triplet (insertion case3) et une ligne est insérée à partir de Ln (insertion case 1) .
Ensuite, nous retournons à la ligne suivante du même triplet pour effectuer le même algorithme.
NB: lorsqu'il y a 2 lignes sur le même triplet, n-1 = 1ère ligne et n = 2ème ligne
exemple:
nous avons dans le tableau a (sans triplet ouvert dans le tableau b)
Code X : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 c1 c2 c3 c5 date c6 -- -- -- -- ------------------- ---- 1 1 1 4 31/01/2020 00:00:01 null 1 1 1 15 31/01/2020 00:00:02 null 1 1 1 15 29/02/2020 00:00:01 null 1 1 1 15 15/04/2020 00:00:01 null 1 1 1 4 15/05/2020 00:00:01 null
nous devrions obtenir dans le tableau b
Code X : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 c1 c2 c3 c5 Date Date_fin -- -- -- -- ---------- ---------- 1 1 1 15 31/01/2020 31/03/2020 1 1 1 15 15/04/2020 14/05/2020 1 1 1 4 15/05/2020 31/12/9999
insertion cas:
Merci d'avance pour vos retours
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 b.c1 = a.c1 b.c2 = a.c2 b.c3 = a.c3 b.date = a.date b.DAT_FIN = 31/12/2999 (case 1) b.DAT_FIN = Ln-1.date (date) + 1 month (case 2) b.DAT_FIN = Ln.date (date) -1 day (case 3) loading date = current_timestamp(0)
Partager