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 :
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
on obtient :
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