Bonjour,
J'ai une question à vous poser, étant face à une table de logs un peu étrange et ayant besoin de transformer les données à l'intérieur pour arriver au résultat souhaité.
J'ai dans cette table ce jeu de donnée :
Je voudrais arriver à ce résultat en construisant un nouveau champ dans une requête SQL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ITER STAT 1 5910 2 15908 3 20001
La règle est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ITER STAT STAT_REELLE 1 5910 5910 2 15908 4088 3 20001 5
- Si ITER=1, STAT_REELLE = STAT.
- SI ITER>1, STAT_REELLE = STAT - (STAT + STAT_REELLE de la ligne ITER -1)
En effet :
- Pour ITER=2 : 15908 - (5910 + 5910) = 4088
- Pour ITER=3 : 20001 - (15908 + 4088) = 5
Ca me fait grandement penser à des fonctions récursives, mais je ne connais pas d'équivalent sous SQL...
Voici ce à quoi je suis arrivé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 select ITER, STAT, CASE WHEN ITER=1 then STAT ELSE STAT - ( (select STAT from LOGS L2 where L2.ITER = L1.ITER - 1 ) + STAT_REELLE de la ligne ITER -1 ) END as STAT_REELLE from LOGS L1
Et c'est là que vous entrez en jeu pour m'aider à dire ce que je pourrais mettre à la place du rouge, vu que je dois utiliser un champ qui n'est pas encore défini à ce moment.
Il est possible de passer par une table temporaire si c'est nécessaire.
En vous remerciant par avance de votre aide, je vous souhaite une excellente journée.
Emmanuel R.
Partager