|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 261 ![]() |
Bonjour à tous,
Je me pose la question sur une manière différente de faire un requête. J'ai une table avec les champs : ID, ID_Dossier,DateOuverure,DateCloture Je souhaite compter le nombre de dossier encore ouverts (avec date de clôture à 0) Par exemple : 1;D1;2011-01-01;0000-00-00 2;D2;2011-01-01;0000-00-00 3;D1;2011-01-01;2000-00-00 4;D3;2011-01-01;2011-01-01 Le nombre de dossier encore ouverts serait à 0. J'ai fait cette requête : Code :
Merci d'avance de votre aide. |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Bonjour,
Si vous ne voulez connaitre que le nombre de dossier encore ouverts, dans ce cas une requête de ce genre devrait fonctionner : Code :
|
||
|
|
00
|
|
|
#3 | |
![]() ![]() |
Je ne comprends pas votre exemple :
Citation:
__________________
Email : http://scr.im/waldar |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 261 ![]() |
Merci de vos réponses.
Dans mon exemple seul D3 est clos car une date de clôture est renseigné. D1 a subit une mise à jour mais n'est pas clos. Le résultat doit donc être de deux (D1 et D2) J'ai essayé la requête de punkoff mais les temps de traitement est très long et les résultats ne me semble pas correct (j'en ai beaucoup moins normalement) Merci d'avance. |
|
|
00
|
|
|
#5 |
![]() ![]() |
Ok, c'est plus clair.
Une remarque, pourquoi utiliser la valeur '0000-00-00' en lieu et place de null tout simplement ? Encore une question, voulez-vous la liste des dossiers encore ouverts ou juste leur nombre ?
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 261 ![]() |
En fait je veux la liste et leur nombre.
Après à partir du nombre j'ai un autre besoin mais j'y arriverai peut être... à voir. Pour le 000-00-00, je ne suis pas mettre des données, elles sont importées depuis un xml tout les soirs... Merci |
|
|
00
|
|
|
#7 | ||
![]() ![]() |
Ça me paraît trop simple pour répondre à votre besoin :
Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 261 ![]() |
Effectivement je ne pense pas que cela marche car votre requête compte dans les résultats la ligne n°1 (dossier D1 ou la date de clôture est à 0), ce qui est normal mais si je rajoute une ligne avec une date de clôture pour D1 elle le compte aussi.
|
|
|
00
|
|
|
#9 | |
![]() ![]() |
Vous venez de me dire :
Citation:
__________________
Email : http://scr.im/waldar |
|
|
00
|
|
|
#10 | ||
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 261 ![]() |
Citation:
Citation:
Avec votre requête j'ai 2 résultats alors que je ne devrais en avoir qu'un (dossier D2) Je ne sais pas si c'est plus clair ? Merci |
||
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
dans votre exemple :
la colonne DateCloture est à 2000-00-00, est-ce une faute de frappe ou non ? Quel est le type de votre champs DateCloture ? un varchar / string ? |
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 261 ![]() |
Oui c'est une faute de frappe... j'enlève mes gants promis !
Le champ est de type datetime. Merci |
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Personnellement je ne vois pas comment faire en une seule requête ce que vous demandez.
A moins, bien-sur, de le faire avec 2 requêtes imbriquées, dont une dans le select. Donc je resterai sur ma proposition initiale qui doit fonctionner, il suffit juste de formater correctement le '0000-00-00 00:00:00' pour que votre SGBD le traduise bien. Il faudra aussi utiliser un distinct dans le select afin de dégager les doublons sur l'ID_DOSSIER, ou d’utiliser un group by si vous souhaitez avoir l'ID max pour un ID_dossier. edit: je viens de voir votre problème du poste #4 : Avez vous un index du type : Code :
edit 2: la requête de Waldar est beaucoup mieux. |
||
|
|
00
|
|
|
#14 | ||
![]() ![]() |
Essayez alors celle-ci :
Code :
__________________
Email : http://scr.im/waldar |
||
|
10
|
|
|
#15 | ||
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 261 ![]() |
Merci Waldar ça à l'air de fonctionner.
Par contre j'ai adapté la requête : Code :
Quand j'execute la requête j'obtiens bien ce que je veux en revanche j'aimerais faire un count pour chaque équipe (j'ai essayé le group by sur a.action_equipe mais non...) Merci |
||
|
|
00
|
|
|
#16 | |||||
![]() ![]() |
Encore MySQL qui laisse faire des bêtises !
![]() Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de regroupement (MAX, MIN, COUNT, AVG) doivent figurer dans le GROUP BY ! Un SGBDR digne de ce nom aurait renvoyé une erreur avec votre requête ! À cause de ce piège MySQLesque, la valeur de a.action_equipe retournée par MySQL est aléatoire ! Reprenons du début... 1) Quels sont les dossiers non clos ? La requête de Waldar, devrait le dire : Citation:
Il suffit de faire une jointure de la requête précédente avec la table des actions : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||
|
00
|
Copyright © 2000-2012 - www.developpez.com