Basic T-SQL Benutzer hier. Ich habe Probleme, eine Aufgabe zu erledigen, und würde mich über einige Hinweise freuen. Entschuldigung im Voraus für eventuelle Fehler, da Englisch nicht meine Muttersprache ist.Berechnung von Kundenreisen basierend auf Transaktionsdaten
Ich habe eine Tabelle mit vielen Transaktionen, der Einfachheit halber sagen wir, dass ich nur zwei Spalten habe: CUSTOMER_ID, das ist mein Kunde und DATE, welches das Datum der Transaktion ist.
Meine Kunden machen eine Menge Transaktionen, während sie in der Stadt sind, aber dann können sie Wochen, Monate oder sogar Jahre verbringen, bevor sie zurückkommen und wieder Transaktionen machen. Ich möchte irgendwie jede dieser "Reisen" identifizieren und die beteiligten Transaktionen gruppieren, dann möchte ich Thins wie Reisedauer berechnen, Anzahl der Transaktionen, usw.
Ich möchte eine Reise in Betracht ziehen wie jede neue Transaktion, die nach einer IDLE-Periode von 10 Tagen auftritt.
Lassen Sie mich versuchen, besser zu meiner Anfrage zu erklären, indem Sie einige einfache Beispiel mit:
Dies ist meine Transaktionen Tabelle:
+-------------+------------+
| CUSTOMER_ID | DATE |
+-------------+------------+
| JHON | 01-01-2016 |
| JHON | 01-02-2016 |
| PEDRO | 01-02-2016 |
| JHON | 01-05-2016 |
| MIKE | 01-05-2016 |
| MIKE | 01-10-2016 |
| JHON | 01-07-2016 |
| … | … |
| JHON | 02-15-2016 |
| JHON | 02-18-2016 |
| MIKE | 02-19-2016 |
| MIKE | 02-19-2016 |
+-------------+------------+
Bisher habe ich diese Abfrage gemacht, um die Besuche des Kunden aufzählen:
SELECT
CUSTOMER_ID,
DATE,
ROW_NUMBER() OVER(PARTITION BY CUSTOMER_ID ORDER BY DATE) as VISIT_NUM
FROM
TRANSACTIONS
WHERE
CUSTOMER_ID IN ('JHON','MIKE','PEDRO')
die Abfrage laufen würde ein ähnliches Ergebnis wie diese geben:
+-------------+------------+-----------+
| CUSTOMER_ID | DATE | VISIT_NUM |
+-------------+------------+-----------+
| JHON | 01-01-2016 | 1 |
| JHON | 01-02-2016 | 2 |
| JHON | 01-07-2016 | 3 |
| JHON | 02-15-2016 | 4 |
| JHON | 02-18-2016 | 5 |
| MIKE | 01-05-2016 | 1 |
| MIKE | 01-10-2016 | 2 |
| MIKE | 02-19-2016 | 3 |
| MIKE | 02-19-2016 | 4 |
| PEDRO | 01-02-2016 | 1 |
+-------------+------------+-----------+
Jetzt kommt der knifflige Teil: Ich muss irgendwie eine Abfrage erstellen, die (vielleicht die obige Abfrage als einen vorherigen Schritt verwendend) mir den Kunden mit ihnen Reise-Info zeigt, mit dem Beispiel fortsetzend würde das ideale Ergebnis folgendermaßen aussehen:
+-------------+----------+---------------+-------------+---------------+--------------+
| CUSTOMER_ID | TRIP_NUM | TRIP_START_DT | TRIP_END_DT | TRIP_DURATION | TRANSACTIONS |
+-------------+----------+---------------+-------------+---------------+--------------+
| JHON | 1 | 01-01-2016 | 01-07-2016 | 7 | 3 |
| JHON | 2 | 02-15-2016 | 02-18-2016 | 3 | 2 |
| MIKE | 1 | 01-05-2016 | 01-10-2016 | 5 | 2 |
| MIKE | 2 | 02-19-2016 | 02-19-2016 | 1 | 2 |
| PEDRO | 1 | 01-02-2016 | 01-02-2016 | 1 | 1 |
+-------------+----------+---------------+-------------+---------------+--------------+
Wie Sie sehen können, kam Mr. Jhon 3 mal im Laufe des Monats Januar und kam im Februar wieder zurück. Da mehr als 10 Tage seit seiner letzten Transaktion im Januar verstrichen sind, möchte ich seine neuen Transaktionen als eine neue "Reise" für ihn betrachten. Mike hatte auch einige Aktivitäten im Januar und kam auch im Februar zurück, in seiner zweiten Reise machte er zwei Transaktionen am selben Tag, das würde ich auch gerne erklären. Wenn ein Kunde nur einen einzigen Tag hatte und etwas Aktivität hatte (wie im Fall von Herrn Pedro), würde ich diesen Eintages-Einzeltransaktions-Datensatz auch als einen Reisedatensatz betrachten.
Ich wäre sehr dankbar für jedes Licht auf diesem, ich habe ehrlich gesagt keine Ahnung, wie es weitergehen soll (ich habe über Cursor gelesen, aber es scheint wie dunkle Magie an diesem Punkt kann nicht einen Weg finden, sie auf diese zu implementieren).
Wir entschuldigen uns nochmals für grammatikalische Fehler und mögliche Auslassungen meinerseits. Ich würde alles weitere klären, wenn nötig.
Ihr Englisch ist besser als 99% des englischen Muttersprachler. –