Dates en sql...

Dates en sql... - SQL/NoSQL - Programmation

Marsh Posté le 13-09-2006 à 12:02:22    

Bonjour a tous
 
Voici mon petit probleme:
je veux faire des statistiques sur une table en fonction d'un champ de type date
Pour l'année je faisais un truc du genre:
SELECT COUNT(id_direction) AS nb FROM interventions
WHERE id_direction='1'
AND date_saisie like '$annee%'" ou $annee était l'annee qui m'interessait
 
jusque la pas de probleme
mais ensuite je veux faire des stats par mois
alors j'ai essayé ca
 
SELECT COUNT(id_direction) AS nb FROM interventions
WHERE id_direction='1'
AND date_saisie like '$annee-$mois%'"  
mais comme je fais une boucle avec ma variable $mois
si $mois=1 par exemple alors il trouve aucun resultat car 1 n'est pas égal à 01 (format de stockage date mysql) pour lui !
 
j'ai bien la possibilité de coder en dur mais cela m'empeche de faire ma boucle...
j'ai essayé ceci
SELECT COUNT(id_direction) AS nb FROM interventions
WHERE id_direction='1'
AND date_saisie like '$annee-_$mois%'" le underscore ajoute 1 caractere variable
mais cela fonctionne pour les 9 premiers mois seulement!
 
Quelqu'un a t il une idée pour me faire progresser?
 
Merci

Reply

Marsh Posté le 13-09-2006 à 12:02:22   

Reply

Marsh Posté le 13-09-2006 à 12:06:51    

ta 1ere requête est déjà pas top:

Code :
  1. SELECT year(date_saisie), COUNT(id_direction) AS nb FROM interventions
  2. WHERE id_direction='1' AND year(date_saisie) = $annee GROUP BY year(date_saisie)


ensuite pour le mois

Code :
  1. SELECT month(date_saisie), year(date_saisie), COUNT(id_direction) AS nb FROM interventions
  2. WHERE id_direction='1' AND year(date_saisie) = $annee GROUP BY month(date_saisie), year(date_saisie)


Reply

Marsh Posté le 13-09-2006 à 12:11:24    

Ok, cool
en effet de voir ton code me fait réaliser qu'il me manque quelques connaissances...
et que mon code partait d'une bonne logique mais montre vite ses limites ;-)
Merci pour tout

Reply

Marsh Posté le 13-09-2006 à 12:25:02    

perso, je préfère travailler avec datepart() que year(), month(), etc. ça permet d'avoir une fonction plus générique pour un résultat identique et plus de possibilités (semaine, jour de la semaine, etc.)

Reply

Marsh Posté le 13-09-2006 à 12:26:47    

Probleme: suite  
Voici le code qui fonctionne
SELECT YEAR (date_saisie), MONTH(date_saisie), COUNT(id_direction) AS nb FROM interventions
WHERE id_direction='1'
AND YEAR (date_saisie)= '$annee'
AND MONTH(date_saisie)= '$mois'
GROUP BY month(date_saisie), year(date_saisie)
 
Je n'ai plus que 1 probleme, quand il n'y a pas de resultat il n'affiche pas 0
ce que "j'avais résolu" avec un left join auparavant
 
est il possible de mixer les 2 ?

Reply

Marsh Posté le 20-09-2006 à 11:44:09    

...tu fais les 2 requetes..et une UNION entre les 2..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed