Bonjour a tous.
Je suis tombé sur une requête en SQL dont je n'arrive pas à comprendre le fonctionnement.
Etant un novice dans ce domaine, je sollicite votre aide pour m'aider à comprendre son fonctionnement.
Petit prérequis, la table hbat contient les colonnes suivantes :
id : l'id du batiment (non unique)
num_version : le numéro de version des infos sur le bâtiment (un bâtiment peut avoir plusieur fois la même version)
libelle : le nom du bâtiment
ts_statut : date de la dernière modification des informations du bâtiment
En gros cette requête permet de générer la date de fin d'une version, (en prenant la date de début de la version suivante).
ex pour les tuples suivants :
on obtient :id=3 num_version=2 ts_statut=10/02/2001 id=3 num_version=2 ts_statut=13/02/2001 id=3 num_version=2 ts_statut=18/02/2001 id=3 num_version=3 ts_statut=22/02/2001
pour le batiment 3, version 2, debut :10/02/2001, fin : 22/02/2001
pour le batiment 3, version 3, debut :22/02/2001, fin : ---
et voilà la requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 select bat.id id, bat.num_version num_version, bat.libelle libelle, min(bat.ts_statut) dateDebut, min(bat2.ts_statut) dateFin from hbat bat, hbat bat2 where bat.id = bat2.id(+) and bat.num_version = bat2.num_version(+) - 1 group by bat.id, bat.num_version, bat.libelle
Merci d'avance pour vos réponses
Partager