Transformation de structure de table
Najac
-
RV71 Messages postés 656 Date d'inscription Statut Membre Dernière intervention -
RV71 Messages postés 656 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je vais tenter d'expliquer simplement mon problème et je m'excuse par avance si ce n'est pas le cas =)
Dans une base de données SQL, je remplis une table avec des données historisées de la forme suivante :
colonne 1 : Date de modification de la donnée
colonne 2 : Valeur de la donnée (exemple : prix d'un article)
J'ai donc l'évolution du prix d'un article dans le temps.
Exemple :
| DATE | PRIX |
| 2020-01-01 | 100 |
| 2020-07-10 | 90 |
| 2020-08-13 | 120 |
| 2020-09-03 | 110 |
Je souhaiterais transformer cette structure de table pour obtenir une nouvelle table avec la suivante :
colonne 1 : Date de début de la période
colonne 2 : Date de fin de la période
colonne 3 : Valeur de la donnée (exemple : prix d'un article)
Et donc obtenir la période de temps pendant laquelle mon article a un prix donné.
Exemple :
| DEBUT | FIN | PRIX |
| 2020-01-01 | 2020-07-10 | 100 |
| 2020-07-10 | 2020-08-13 | 90 |
| 2020-08-13 | 2020-09-03 | 120 |
| 2020-09-03 | | 110 |
L'un de vous pourrait-il m'indiquer des pistes pour écrire la requête SQL me permettant d'obtenir la seconde table ?
Je vous remercie par avance !!
Najac
Je vais tenter d'expliquer simplement mon problème et je m'excuse par avance si ce n'est pas le cas =)
Dans une base de données SQL, je remplis une table avec des données historisées de la forme suivante :
colonne 1 : Date de modification de la donnée
colonne 2 : Valeur de la donnée (exemple : prix d'un article)
J'ai donc l'évolution du prix d'un article dans le temps.
Exemple :
| DATE | PRIX |
| 2020-01-01 | 100 |
| 2020-07-10 | 90 |
| 2020-08-13 | 120 |
| 2020-09-03 | 110 |
Je souhaiterais transformer cette structure de table pour obtenir une nouvelle table avec la suivante :
colonne 1 : Date de début de la période
colonne 2 : Date de fin de la période
colonne 3 : Valeur de la donnée (exemple : prix d'un article)
Et donc obtenir la période de temps pendant laquelle mon article a un prix donné.
Exemple :
| DEBUT | FIN | PRIX |
| 2020-01-01 | 2020-07-10 | 100 |
| 2020-07-10 | 2020-08-13 | 90 |
| 2020-08-13 | 2020-09-03 | 120 |
| 2020-09-03 | | 110 |
L'un de vous pourrait-il m'indiquer des pistes pour écrire la requête SQL me permettant d'obtenir la seconde table ?
Je vous remercie par avance !!
Najac
Configuration: Windows / Chrome 85.0.4183.102
A voir également:
- Error pdf structure 40
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Save as pdf office 2007 - Télécharger - Bureautique
- Télécharger dictionnaire larousse pdf gratuit - Télécharger - Dictionnaires & Langues
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Notices gratuites pdf - Guide
5 réponses
Bonjour,
je pense que cela pourrait convenir :
https://blog.sodifrance.fr/fonctions-lead-et-lag-dans-sql-server/
A+
je pense que cela pourrait convenir :
https://blog.sodifrance.fr/fonctions-lead-et-lag-dans-sql-server/
A+
Bonjour,
Il n'y a pas d'autre colonne dans ta table, notamment une colonne d'identifiant, du genre id_article ? Ça va changer la requête s'il faut gérer un groupement des données.
Sinon je suis en phase avec RV71 dans son analyse de la méthode à utiliser (et je découvre au passage ces fonctions, en pensant à toutes ces fois où je les contournais à grands coups de cte et autojointures... *petite larme*)
Xavier
Il n'y a pas d'autre colonne dans ta table, notamment une colonne d'identifiant, du genre id_article ? Ça va changer la requête s'il faut gérer un groupement des données.
Sinon je suis en phase avec RV71 dans son analyse de la méthode à utiliser (et je découvre au passage ces fonctions, en pensant à toutes ces fois où je les contournais à grands coups de cte et autojointures... *petite larme*)
Xavier
@Reivax : Oui effectivement il y a une colonne d'ID de l'article...
@RV : Merci pour le tuyau je vais étudier ces fonctions de prés ! ;-)
@RV : Merci pour le tuyau je vais étudier ces fonctions de prés ! ;-)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, dans ce genre de situation, je travaillerais différemment:
- je garderais la table telle qu'elle est
- je créerais une requête qui fournit les données comme tu le décris
- je n'utiliserais pas cette requête pour créer une nouvelle table, mais j'utiliserais directement la requête comme source pour le reste du travail
- je garderais la table telle qu'elle est
- je créerais une requête qui fournit les données comme tu le décris
- je n'utiliserais pas cette requête pour créer une nouvelle table, mais j'utiliserais directement la requête comme source pour le reste du travail
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Hello !
Je viens (enfin) de tester la fonction lead (et sa copine lag!).
C'est EXACTEMENT ce qu'il me fallait !!
Merci, merci, merci, merci @RV71 !!!
Pour ceux qui aurait besoin, voici la requête :
Je viens (enfin) de tester la fonction lead (et sa copine lag!).
C'est EXACTEMENT ce qu'il me fallait !!
Merci, merci, merci, merci @RV71 !!!
Pour ceux qui aurait besoin, voici la requête :
SELECT [CODE_ARTICLE], [DATE] as [DEBUT], LEAD([DATE],1) OVER (partition by [CODE_ARTICLE] order by [ID_HISTO_PRIX_ARTICLE]) as [FIN], [PRIX] FROM [HISTO_PRIX_ARTICLE]