2016-05-12 9 views
3

dies ist meine erste Frage Stackoverflow, so bitte sanft seine ;-)Count verschiedene mit Einträgen im Laufe der Zeit zu wiederholen

Ich habe eine Tabelle mit einzigartiger CustomerIDs und eine Tabelle einschließlich ihren Transaktionen mit einem bestimmten Transaktionstyp (Kauf, presell usw. .)

Was ich zählen möchte, sind alle Kunden, die einen bestimmten Transaktionstyp einmal getan haben. Aber wenn ein Kunde eine zulässige Transaktion in 2014 durchgeführt hat, möchte ich nicht, dass dieser Kunde in 2015 erneut gezählt wird. Ist das sinnvoll?

Ich habe versucht, die folgende Anweisung:

SELECT 

datepart(yyyy,t.TransactionDate) 
,count(DISTINCT c.customerID) 

FROM Customers as c 

    JOIN Transactions as t 
    ON c.CustomerID = t.CustomerID 

WHERE t.TransactionType = 'presell' 
GROUP BY datepart(yyyy,t.TransactionDate) 

Das Problem ist, dass, natürlich, ein Kunde die gleiche Transaction einmal im Jahr tun. Mit dieser Aussage zähle ich also die Kunden pro Jahr ... und nicht nur einmal insgesamt.

EDIT: Lets machen es ein bisschen einfacher. Es gibt nur eine Tabelle und die Tabelle sieht ein bisschen wie folgt aus:

CustomerTable

Also, wenn ich Filterung für „Presell“ mein Ergebnis ein bisschen wie dieses

enter image description here

aussehen sollte 2014 hat Kunde A einen Vorverkauf getätigt, 2015 hat Kunde B einen Vorverkauf getätigt, 2016 hat Kunde A wieder einen Vorverkauf gemacht, aber ich zähle diesen Kunden nicht, weil ich ihn bereits 2014 gezählt habe. Hoffentlich machen Sie die Dinge ein bisschen klarer.

Danke für jede Beratung und Hilfe hier.

+0

Wenn Sie sagen: "Aber wenn ein Kunde eine berechtigte Transaktion im Jahr 2014 durchgeführt hat", meinen Sie, dass Sie nur die zulässigen Transaktionen im Abstand von zwei Jahren zählen möchten? Bitte erläutern Sie – Webeng

+2

Willkommen bei Stackoverflow. Wenn Sie eine SQL-Frage stellen, erhalten Sie am ehesten eine gute Antwort, wenn Sie Tabellenstrukturen, Beispieldaten und die erwartete Ausgabe mit diesen Beispieldaten zusammen mit allen Versuchen, die Sie unternommen haben, und deren Funktionsweise (falsches Ergebnis) einschließen Daten, gibt einen Fehler usw.). Bitte beachten Sie: http: // stackoverflow.com/help/how-to-ask –

+1

Wie Tom H sagte, wenn Sie Beispiele für die 2 Tabellen und auch ein Beispiel für die Art von Ergebnis, das Sie von Ihrer Abfrage erwarten, kalt ist, würde dies viel helfen :) – Webeng

Antwort

0

Wenn Sie es betrachten, ist dies der erste Verkaufspreis pro Kunde, an dem Sie interessiert sind. Sie können das ganz einfach erreichen, indem Sie MIN(TransactionDate) pro Kunde auswählen. Sobald Sie dies getan haben, können Sie zählen.

0

Da wollen Sie Customers von TransactionType zählen, sollten Sie von CustomerID und TransactionType werden Gruppierung, nicht die TransactionDate:

SELECT datepart(yyyy,t.TransactionDate) -- this part won't work anymore without grouping it. Doesn't seem to be relevant to what you're selecting 
    ,count(DISTINCT c.customerID) 

FROM Customers as c 

    JOIN Transactions as t 
    ON c.CustomerID = t.CustomerID 

WHERE t.TransactionType = 'presell' 
GROUP BY c.CustomerID, t.TransactionType 

Dies sollte die Zahl derer zurückgeben, die eine Transaktion vom Typ mindestens einmal abgeschlossen haben unabhängig vom Jahr.

Verwandte Themen