6
votes

Compter de nouveaux clients par mois

Je suis fou confus à ce sujet pour une raison quelconque.

Fondamentalement, je cherche une requête qui trouvera le nombre de nouveaux clients par mois, depuis 2010. p>

J'ai l'adresse e-mail du client (email), toutes les commandes passées (orderid), et quelle date a été placée sur (orderdate). La table est Tblorder. P>

Je sais qu'un "nouveau client" est: (a) une personne qui n'a jamais commandé avant em> la date / mois et b) qui a au moins une Commandez après em> la date / mois p>

Je voudrais que la sortie soit quelque chose comme celle-ci à la fin, avec une méthode plus simple étant meilleure: p>

SELECT <customer info> 
FROM <customer table> 
WHERE (SELECT COUNT(<order info>) 
    FROM <order table> 
    WHERE <customer info> = <current customer> 
        AND <date> < <target date>) = 0 
        AND (SELECT COUNT(<order info> 
            FROM <order table> 
            WHERE <customer info> = <current customer> 
            AND <date> > <target date>) > 0


0 commentaires

5 Réponses :


1
votes

Commencez par définir un nouveau client

select distinct FirstTimer.customer_id 
from
(select customer_id,min(order_date) as FirstOrderDate
from tblOrder 
group by customer_id
having Month(min(order_date))=month(TargetDate) and
       year(min(order_date))=year(targetDate)
) FirstTimer
join tblOrder ot on ot.customer_id=First_timer.customer_id
where ot.order_date > target_date


1 commentaires

Le nom de la table est là-haut! "Adresse électronique du client (email), toutes les commandes passées (orderid) et quelle date il a été placé sur (orderdate). La table est Tblorder" mais merci! Je vais certainement regarder cela plus près.



2
votes

Essayez: xxx

sqlfiddle ici .


3 commentaires

D'après ce que je peux dire, c'est la réponse la plus précise basée sur les résultats que je reçois. Je ne sais pas comment le confirmer avec certitude, mais pour le moment, merci beaucoup!


@spazzie: Eh bien, vous pourriez prendre ma parole pour elle ...;) Plus sérieusement, s'il y a moins de millions de lignes impliquées, vous pouvez jeter votre table à Excel, puis vérifier vos résultats là-bas.


@spazzie: Je suis heureux d'aider. :)



0
votes

Cela vous permettra de compter votre nouveau client par année et mois: xxx

Il ne les renvoie pas dans le même format que vous avez demandé, mais cela peut être fait dans Excel ou en SQL avec un peu de travail supplémentaire.


0 commentaires

0
votes

Légère édition de la réponse de @mark Bannister. L'intention indiquée par OP est de capturer le nombre de nouveaux clients au cours de laquelle ils ont placé leur premier ordre. La définition de «nouveau client» de OP est confuse en ce qu'il spécifie:

Un "nouveau client" est: (a) quelqu'un qui n'a jamais commandé avant le Date / mois et b) qui a au moins une commande après forte> la date / mois (accentuation ajoutée) p> blockQuote>

Peut-être que c'est vraiment ce que l'OP veut, mais cela serait appelé de manière précise avec précision un "nouveau client qui devient un acheteur répété dans un mois suivant" car il élimine: p>

  1. clients qui ne placent qu'un ordre li>
  2. clients qui placent toutes leurs commandes dans la même date / mois li> ol>

    la solution de Mark correctement (?) Élimine ces clients comme Son Fiddle SQL A> montre que Fred @ home n'est pas compté comme un nouveau client. p>

    Cependant, OP indique également à la fin de son poste que les "clients applicables" sont: P>

    Ceux qui n'ont pas été commandés avant le mois entré p> blockQuote>

    Pour capturer tous les nouveaux clients (ce qui est ce que je pense que l'OP est vraiment après), nous pouvons toujours utiliser la belle solution de pivot de @ Mark's Nice et tout ce que nous avons à faire est de regarder le min (ordonnance de commande) et Ignorez simplement la comparaison maxDate comme indiqué ci-dessous: P>

    SELECT COUNT(DISTINCT(email)) FROM tblOrder
    


0 commentaires

-1
votes
SELECT EXTRACT(MONTH FROM orderdate) AS month,
       EXTRACT(YEAR FROM orderdate)  AS year, 
       COUNT(*) 
FROM (
       SELECT MIN(orderdate) AS orderdate, name
       FROM tblOrder
       GROUP BY name
     )
GROUP BY EXTRACT(MONTH FROM orderdate),
         EXTRACT(YEAR FROM orderdate) 

0 commentaires