2017-03-15 4 views
0

Ich versuche herauszufinden, wie Sie eine Abfrage schreiben, um herauszufinden, wie viele Kunden eine Bestellung 1 Mal, 2 Mal usw. innerhalb eines bestimmten Datumsbereichs aufgegeben haben. Die Kunden werden mit ihrer eindeutigen E-Mail-Adresse identifiziert und die Bestellungen sollten die eindeutigen Bestellnummern sein.Distinct Order Count von Datumsbereich

Grundsätzlich werden die Daten zahlreiche aufträge ids pro Kauf zeigen, da jede Position eines eigenes doppeltes Auftrags-ID bekommt ...

Das Ergebnis soll einen Kunden mit 4 Aufträgen im Jahr zurück. Es gibt jedoch nichts zurück. Jede Hilfe wäre willkommen.

CURRENT QUERY (meine Datenbanktabelle genannt wird amazon)

SELECT COUNT(DISTINCT amazon.`amazon-order-id`), amazon.`buyer-email` 
FROM amazon 
WHERE amazon.`purchase-date` >= '1/1/2014' and 
     amazon.`purchase-date` <= '12/31/2014' 
GROUP BY amazon.`buyer-email` 
HAVING COUNT(amazon.`amazon-order-id`) = 4 

Ich bin Kopieren und einige Beispieldaten unter Einfügen:

*114-2021965-2390651 3/18/2014 [email protected]                                              
*114-2021965-2390651 3/18/2014 [email protected]                                              
*114-8957580-1296223 3/26/2014 [email protected]                                              
*114-8957580-1296223 3/26/2014 [email protected]                                              
*108-5564197-2113836 6/2/2014 [email protected]                                              
*108-5564197-2113836 6/2/2014 [email protected]                                              
*114-4685236-6299434 10/11/2014 [email protected]                                              
*114-4685236-6299434 10/11/2014 [email protected] 
+0

die haben entfernen Klausel – maSTAShuFu

Antwort

0

Ihre Beispieldaten verwenden, Ihre Abfrage einmal habe ich hinzugefügt verschiedene an die HAVING COUNT-Anweisung.

HAVING COUNT(DISTINCT amazon.amazon-order-id) = 4 

Auch die Daten in Ihren Beispieldaten verursachten mir einige Probleme. Ich musste den einstelligen Zahlen Nullen hinzufügen, damit die Where-Klausel korrekt funktioniert. Ich bin mir nicht sicher, ob das für dich zählt.

3 -> 03 
6 -> 06 2-> 02 
+1

die Daten zu einem yyyy-mm-dd Format gearbeitet konvertieren. danke – ecom

0

Verwenden Sie zuerst ein Standard-Datumsformat.

Dann, wenn Sie eine allgemeine Antwort wollen, dann zwei Aggregationsebene verwenden:

select num_orders, count(*), min(`buyer-email`), max(`buyer-email`) 
from (select a.`buyer-email`, 
      count(distinct a.`amazon-order-id`) as num_orders 
     from amazon a 
     where a.`purchase-date` >= '2014-01-01' and 
      a.`purchase-date` < '2015-01-01' 
     group by a.`buyer-email` 
    ) a 
group by num_orders 
order by num_orders; 
+0

danke werde morgen früh versuchen, wenn ich an meinem Arbeitscomputer bin. – ecom