Hello,
J'ai une "table1" qui contient des infos telles que le statut et l'id
J'ai une "table2" qui permet d'enregistrer l'historique des modifications apportées à "table1". "table2" contient les champs table1Id, date, newStatus, OldStatus.
Je souhaiterais faire une requête qui va me grouper tous les enregistrements de table1 dont le statut=9 et dont "table2" contient au moins une fois un historique avec "newStatus=9" et "oldStatus=7". Cependant, comme c'est un historique, il y a plusieurs enregistrement identique, car on peut annuler une action et la refaire par la suite hors, dans mon count(*), ca reprend le nombre de fois que l'on trouve un enregistrement dans "table2" correspondant aux critères. Hors ce n'est pas mon cas ici. Je m'en fou de tous les enregistrements de "table2", je veux juste le plus récent qui correspond au critère.
Voici la requête vous comprendrez peut être mieux:
Cette requête devrait normalement me retourner 2 enregistrements mais elle m'en retourne 6 car j'ai 5x la correspondance dans la table2 pour un enregistrement, hors j'aimerais juste prendre 1 seul enregistrement unique et le dernier de la table2 pour faire la jointure avec la table1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT COUNT(*) AS nb, DATE(t2.date) AS date FROM table1 AS t1 INNER JOIN table2 as t2 ON t2.table1Id=t1.id WHERE t1.statusId=9 AND (DATE(t2.date) BETWEEN "2011-01-01" AND "2012-01-01" ) AND t2.newStatus=9 AND t2.oldStatus=7 GROUP BY MONTH(t2.date) ORDER BY t2.date DESC
Une idée?
Merci beaucoup
Partager