Bonjour,
Je me tourne vers vous car malgré quelques heures passées je ne parviens pas à réaliser la requête qui fera mon bonheur.
J'ai simplifié mon problème, pourriez-vous m'aider.
Prenons les 3 tables suivantes :
produit controle complement id : int PK
nom : stringid : int PK
produit_id : int FK
couleur : string
date : int (timestamp UNIX)
stock : floatid : int PK
produit_id : int FK
couleur : string
date : int (timestamp UNIX)
ajout : float
J'ai à une date donnée, un produit donné, d'une couleur donnée, en une certaine quantité.
Cette valeur peut faire l'objet d'un contrôle qui renseigne une ligne dans la table contrôle
Il est possible d'ajouter du produit, ceci est tracé dans la table complément SAUF (si le processus est respecté) si un produit d'une couleur donnée arrive en rupture de stock lors d'un contrôle (c'est en ce cas non un complément mais un nouveau contrôle "évolué" qui doit être appliqué)
Je cherche à mettre en évidence 2 listes : 2 requêtes
1/ les produit en stock : le dernier contrôle (avec sa date) des stock différents de 0. => ça j'ai réussi : OK
2/ la liste cas hors processus : si le dernier contrôle réalisé pour un produit d'une couleur est à 0 et qu'il y a eu des ajouts depuis ce contrôle à 0. (avec en bonus la somme des quantité ajoutées) => là, j'avoue que je n'y arrive pas.
J'ai fait ceci pour le cas n°1 :
Et j'ai essayé plusieurs choses pour le cas n°2 sans succès
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT a.* , produit.nom FROM controle a INNER JOIN ( SELECT id, MAX(date) date FROM controle WHERE stock <> 0 AND stock is not null GROUP BY produit_id, couleur ) b ON a.id = b.id LEFT JOIN produit ON a.produit_id = utilisateur.id ORDER BY a.produit_id, a.couleur
Ma dernière tentative étant celle-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT a.* , produit.nom, SUM(complement.ajout) FROM controle a INNER JOIN ( SELECT id, MAX(date) date FROM controle WHERE stock <> 0 AND stock is not null GROUP BY produit_id, couleur ) b ON a.id = b.id LEFT JOIN produit ON a.produit_id = utilisateur.id INNER JOIN complement ON complement.produit_id = a.produit_id AND complement.couleur = a.couleur WHERE complement.date > a.date GROUP BY complement.produit_id, complement.couleur ORDER BY a.produit_id, a.couleur
Partager