Je suis confrontée à un problème que j'ai passé beaucoup de temps à essayer de résoudre, et bien que j'ai une solution, elle est maladroite et implique le traitement pl/sql, et je me demandais ce que les autres pourraient proposer.Récupération d'une valeur précédente courante et la plus récente (Oracle)
Je travaille avec un jeu de données qui crée une nouvelle ligne chaque fois qu'un enregistrement est modifié, conservant ainsi un historique. La version la plus récente est ensuite affichée dans notre application. Considérons une table avec les données suivantes:
Person ID Last_Name Address_line1 Effective_Start_Date Effective_End_Date 4913 Jones 1 First Street 03-aug-02 31-dec-12 4913 Cross 1 First Street 01-feb-02 02-aug-02 4913 Cross 86 Green Avenue 01-mar-01 31-jan-02 4913 Cross 87 Devonshire Road 01-jan-90 28-feb-02
Dans le cadre d'un rapport, je dois extraire les détails qui ont changé entre un ensemble donné de dates. Par exemple, disons que je veux extraire le address_line1
actuel et le address_line1
précédent avec la date du changement (effective_start_date
lorsque la nouvelle adresse a été ajoutée). L'avertissement est que si d'autres données de colonne changent, cela créera une nouvelle ligne aussi. Par exemple, dans l'exemple ci-dessus, le last_name
a été modifié après la modification de l'adresse. Malheureusement, la requête doit être générique afin qu'elle puisse être exécutée dans le cadre d'un rapport, c'est-à-dire. ne pas avoir à spécifier explicitement les dates de début et de fin.
Espérons que tout a un sens. J'espère que vous êtes toujours avec moi. Donc, étant donné l'ensemble de données ci-dessus, je me attends de voir les résultats suivants dans mon rapport:
Person ID Surname Address_line1 Prev_Address_line1 Effective Start date of New Address Line 1 4913 Jones 1 First Street 86 Green Avenue 01-feb-02
Mon approche implique le traitement avec pl/sql et en bouclant sur un grand nombre de dossiers, mais je me demandais si cela peut être fait dans une seule requête sql.
Est-ce que quelqu'un a des idées sur le fait que cela peut être fait en utilisant seulement sql?