Bonjour,
j'apprends le SQL un peu sur le tas. J'ai bien eu des cours de SGBD à l'université mais ça n'allait pas au delà des jointures pour autant que je me souvienne.
J'ai aujourd'hui une table remplie de références, dates et prix, que je dois mettre à jour car les prix qui sont "fermés" m'empêchent de vendre la référence concernée.
Un schéma valant mieux qu'un long discours, voici un exemple :
Donc voilà, les dates se suivent au fur et à mesure des mises à jour des tarifs.
Lorsque la dernière date est "ouverte" (=NULL), le prix renseigné sort, car la requête est :Vous voyez le problème pour le fournisseur 1, article 2, aucune date de fin n'est ouverte, donc la requête précédente renverra NULL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT Prix FROM TablePrix WHERE Fournisseur = 'X' AND Article = 'Y' AND DateFin IS NULL
Je cherche à écrire :
- soit un UPDATE qui ouvre massivement toutes ces "dates de fin" de références où il n'y a aucune "date de fin" ouverte, sachant que c'est la "date de fin" la plus récente qui doit être ouverte bien sûr,
- soit un SELECT qui me sélectionne, pour une référence donnée, en priorité le prix correspondant à une "date de fin" ouverte, sinon le prix de la "date de fin" la plus récente s'il n'existe pas de "date de fin" ouverte.
J'ai commencé par essayé un SELECT, mais je galère un peu... Je mélange les MAX(), les TOP 1, les SELECT imbriqués etc...
Je ne demande pas forcément une solution clé en main, même si ça me ferait gagner du temps c'est sûr, mais au moins une aide par rapport à la construction de la requête, par quoi commencer, par exemple grouper les Fournisseur, Article, puis trier les "date de fin" par ordre décroissante et prendre la première, mais avant ça il faut savoir s'il existe une "date de fin" ouverte ou non, etc...?
Pour terminer je précise qu'il n'y a dans la réalité pas d'ID, les clés primaires sont le fournisseur, l'article et la "date de début".
J'espère n'avoir pas été trop fouillis dans ma demande d'aide, et vous remercie par avance !
Yat'
Partager