2010-12-01 19 views
2

J'essaie de signaler le nombre d'entrevues que nous avons fait par jour.Compte et groupe par date devrait retourner 0 sur aucune valeur

J'ai une table d'entretiens tels que

interviewid, StaffID, date, commentaires ...

et une table de référence date contenant toutes les dates de 2005 à 2020 ayant un seul champ de date nommé ref.

Ma requête est:

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where type = 2 
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d') 

Is fonctionne très bien pour afficher l'interview que nous avons fait, mais pas quand on n'a pas fait des interviews ...

Par exemple, cela retourne:

1 
2 
4 

Mais il devrait retourner

0 
1 
0 
2 
0 
4 
0 

EDIT:

Apparemment, les problèmes provient de la clause where parce que si je le supprimer, la requête fonctionne très bien ...

Répondre

3

essayez de remplacer à

right join 

au lieu

left join 

un autre changement est

where type = 2 

à

where type = 2 OR type IS NULL 

SO la requête finale

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where (type = 2 OR type is null) 
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d') 
+0

J'ai exactement le même résultat –

+0

mise à jour réponse, voir –

0

Si je vous comprends bien, type est une colonne d'interviews. Votre table jointe contient des lignes pour les dates sans interviews puisque vous utilisez une jointure correcte, mais ces lignes ont NULL dans la colonne type (et toute autre colonne de interviews) car il n'y a aucune entrée pour ces dates dans la table interviews. Ils sont filtrés par votre clause WHERE qui nécessite type=2, ce qui explique pourquoi COUNT ne les voit pas. Vous pouvez essayer quelque chose comme WHERE (type=2 OR type IS NULL), au moins si interviews.type n'est jamais NULL.

+0

Cela a fonctionné grâce! –