Transformation de structure de table

Fermé
Najac - 17 sept. 2020 à 19:14
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 - 25 sept. 2020 à 16:29
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
Configuration: Windows / Chrome 85.0.4183.102
A voir également:

5 réponses

RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
17 sept. 2020 à 21:33
Bonjour,
je pense que cela pourrait convenir :
https://blog.sodifrance.fr/fonctions-lead-et-lag-dans-sql-server/

A+
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
18 sept. 2020 à 09:46
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
0
@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 ! ;-)
0
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 Ambassadeur 1 554
21 sept. 2020 à 14:47
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
0

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 :
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]
0
RV71 Messages postés 610 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 27 novembre 2024 31
25 sept. 2020 à 16:29
Pas de quoi, par contre merci de mettre la discussion en 'résolue' du coup.

A+
0