Bonjour,
Qui pourrait m'aider pour concevoir une requête spécifique généralisée ?
Dans mon schéma, je dispose de deux tables : PRODUITS et VENTES. Pour faire court, je les restreins aux colonnes concernées par mon problème :
Un produit quelconque est instancié de façon unique dans la table PRODUITS. Cependant, il peut avoir de multiples états, à chaque état correspond une instance de VENTES.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 PRODUITS.IDPROD, clé primaire VENTES.IDPROD, clé étrangère qui permet de faire la jointure VENTES.DTRECEP, date de réception produit VENTES.DTRAYON, date de mise en rayon VENTES.DTTRANS, date de vente officielle VENTES.DTINVALIDATION, date de retrait du produit
Un fournisseur livre un produit, qui entre aussitôt dans le stock, ceci génère une instance de VENTES, avec DTRECEP remplie.
Par exemple, un fournisseur livre 6 paquets de yaourts, cela crée 6 rows dans VENTES.
Quand ce produit est mis en rayon/vente, la date DTRAYON est générée.
Deux cas se présentent alors : soit le produit est vendu, auquel cas la DTTRANS est validée, soit il ne l'est jamais ou est périmé, auquel cas il est retiré et la DTINVALIDATION est remplie.
Donc, tant que DTTRANS et DTINVALIDATION sont "null", le produit est en rayon.
Si je cherche un produit précis pour demander son instance vendue la plus récente, la requête est simple :
Malheureusement, si je veux généraliser cette requête à la table toute entière, je n'y arrive pas, puisque je ne sais pas comment donner la clé dans la sous-requête. Ma seule solution pour le moment est de faire une procédure à laquelle je fournis la clé IDPROD...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT IDPROD FROM VENTES WHERE IDPROD = <clé> AND DTTRANS = (SELECT GREATEST(DTTRANS) FROM VENTES WHERE IDPROD = <clé>);
N'y aurait-il pas une requête SQL qui me permettrait de faire une passe générale ?
Merci par avance de vos réponses.
Partager