Bonjour,
N'étant pas expert en requete SQL, je vous soumet mon petit probleme.
J'ai une requete qui me retourne le temps de traitement (en secondes) d'une tache par semaine.
Ex:
SEMAINE |ID_TACHE | temps de traitement|
1 |123 | 300
1 |124 |600
1 |125 |5000
2 |126 |100
2 |127 |2500
2 |128 |500
Je me sers de ces resultats pour faire un graphique de statistique avec comme données:
SEMAINE | NOMBRE DE TACHE TRAITEES | TPS TRAITEMENT MOYEN
Semaine 1 | 3 taches | 1966
Semaine 2 | 3 taches | 1033
Finalement, mon probleme :
Je voudrais enlever des resultats de la premiere requetes les 10% qui representent les plus long temps de traitement.
Est-il possible de faire cela en une seule requete avec une clause LIMIT, qui prendrait en compte le nombre de resultats que renvoie la requete, quelque chose du style :
1 2 3 4
| SELECT semaine, id_tache, temps
FROM taches
ORDER BY temps ASC
LIMIT 0, CEIL(NOMBRE_DE_RESULTATS_RENVOYES - NOMBRE_DE_RESULTATS_RENVOYES*0.2) |
Je voudrais le faire en une seule requete car celle ci prend deja 30 secondes a l execution (la table a des millions d'enregistrements et je fais des jointures, etc...). Si possible, j'aimerais eviter de faire :
SELECT COUNT(id_tache) FROM taches
Dans un langage intermediaire:
MA_LIMITE = CEIL(NOMBRE_DE_RESULTATS_RENVOYES - NOMBRE_DE_RESULTATS_RENVOYES*0.2)
Puis:
1 2 3 4
| SELECT semaine, id_tache, temps
FROM taches
ORDER BY temps ASC
LIMIT 0, MA_LIMITE |
Est-ce faisable, suis-je clair ?
Merci pour votre aide
Partager