Bonjour,
le titre n'est pas très explicite, mais je rencontre un problème de performance sur une requête.
En fait, j'ai une table avec un id, une date, et un type (qui peut être 0 ou 1).
Je cherche à récupérer de manière très rapide le nombre d'éléments de type 1, depuis l'avant dernier élément de type 0.
Voici un exemple de ma table (je ne mets pas les heures pour simplifier)
ID, Date, Type
1, 01/01/2015, 1
2, 01/01/2015, 0
3, 03/01/2015, 1
4, 05/01/2015, 1
5, 07/01/2015, 1
6, 07/01/2015, 0
J'aimerais récupérer les informations de cette manière avec un select (si possible) :
ID, Date, Type, Nb type 1 precedent
1, 01/01/2015, 1, NULL (ou 0 ce n'est pas grave)
2, 01/01/2015, 0, 1
3, 03/01/2015, 1, NULL (ou 0)
4, 05/01/2015, 1, NULL (ou 0)
5, 07/01/2015, 1, NULL (ou 0)
6, 07/01/2015, 0, 3
Là où je bloque c'est que le tout doit être dynamique, si jamais dans mon exemple, l'élément d'ID 5 devient un élément de type 0, alors :
1, 01/01/2015, 1, NULL (ou 0 ce n'est pas grave)
2, 01/01/2015, 0, 1
3, 03/01/2015, 1, NULL (ou 0)
4, 05/01/2015, 1, NULL (ou 0)
5, 07/01/2015, 0, 2
6, 07/01/2015, 0, 0
Je suis donc passé par une requête "classique", avec l'ajout une colonne qui est une sous-requête et qui me récupère ce que je veux, mais cela prend énormément de temps. J'ai essayé de créer une vue indexée, mais il y a tellement de contraintes, que je n'ai jamais pu réussir à placer l'index.
Auriez-vous une idée, une autre façon de faire pour améliorer les performances ?
Je vous remercie.
Partager