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 : string
id : int PK
produit_id : int FK
couleur : string
date : int (timestamp UNIX)
stock : float
id : 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 :
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
Et j'ai essayé plusieurs choses pour le cas n°2 sans succès
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