Je cherche à compter un certain nombre d'instances pour un groupe de personnes qui avaient une demande par mois, mais je ne veux que compter cela une fois plutôt que souvent, la personne a demandé quelque chose. Voici un exemple de ma table de données, donc cela pourrait avoir plus de sens
July19 August19 Septemeber19 4 3 2
3 Réponses :
Vous pouvez utiliser compter (distinct) code> et simplifier radicalement la logique de comparaison de la date. Je suis sûr que vous voulez que vous souhaitiez des clients qui se chevauchent du tout avec les mois, donc:
Je reçois le même problème mentionné ci-dessous, compte d'un par mois, quoi qu'il arrive. Voir les modifications.
@ Ziegler199. . . Utilisez Count (*) Code>. Comme la réponse originale essayait de suggérer, compter (distinct) code> ne semblait pas approprié.
Vous accédez à plusieurs reprises de la même table, cela peut être simplifié en utilisant l'agrégation conditionnelle em>. De plus, vous souhaitez probablement vérifier si la demande de démarrage / extrémité se chevauche avec un mois donné. En ce qui concerne votre une fois par client em>, cela peut être fait en utilisant distnct: Select client,
count(distinct CASE WHEN RequestEndDate >= '2019-07-01'
AND RequestStartDate < '2019-08-01'
then "Customer ID" end) AS July19, -- don't know if this matches your logic, once per customer?
count(distinct CASE WHEN RequestEndDate >= '2019-08-01' -- overlap calculation
AND RequestStartDate < '2019-09-01'
then "Customer ID" end) AS Aug19,
count(distinct CASE WHEN RequestEndDate >= '2019-09-01'
AND RequestStartDate < '2019-10-01'
then "Customer ID" end) AS Sep19
from #testdata21234
group by client;
Cela réduit donc le nombre de «1» chaque mois. Filtrage à travers des résultats 30K, ce n'est pas correct. Dans mon exemple, je suppose que cela fonctionnerait mais pour une taille d'échantillon plus complexe plus complexe, cela n'a pas fonctionné.
Cela réduit le nombre de '1' chaque mois i>: S'il y a une relation 1-1 entre le client et le client, oui. Vous devez expliquer votre logique
Voir les modifications. Désolé pour la confusion. Merci pour votre aide jusqu'à présent
Vos modifications montrent que le résultat renvoyé par My Select, le nombre d'identifiants de clients distincts pour chaque mois
Je pense que le code de codage de chaque mois n'est pas une bonne logique SQL, vous devez utiliser groupe par code> et format code> (voir le format de la date) . Donc, si, par exemple, vous essayez de compter le nombre de clients commencés chaque mois, vous devez faire quelque chose comme ceci: SELECT
FORMAT(g."RequestStartDate",'MMMM yy') month_year,
COUNT(DISTINCT g."Customer ID") count_clients
FROM #testdata21234 g
GROUP BY 1
Pourquoi le premier est-il compté comme "juillet" alors que le troisième est compté comme "septembre"? Le dernier ne devrait-il pas être "octobre"? Pas clair pour moi comment vous attribuez le mois à chaque demande.
distinct code> avec un groupepar code> est (presque) toujours redondant et signifie normalement que votre groupepar code> est faux. Dans ce cas, c'est le premier.