2017-06-07 5 views
0

Ich versuche, die Retentionsrate mit MySQL zu berechnen und beginnen mit dieser:Retention Rate mit MySQL

SELECT 
    s_order.ordertime, 
    DATE_SUB(future_orders.ordertime, INTERVAL 90 DAY), 
    count(distinct s_order.userID) as active_users, 
    count(distinct future_orders.userID) as retained_users 
FROM s_order 
LEFT JOIN s_order as future_orders on 
     s_order.userID = future_orders.userID 
     AND s_order.ordertime = DATE_SUB(future_orders.ordertime, INTERVAL 90 DAY); 

Das funktioniert nicht - ich alle Benutzer aktiv sind, und deshalb habe ich DATE_SUB(future_orders.ordertime, INTERVAL 90 DAY), zu den Auswahlkriterien sehen was passiert. Es gibt jedoch NULL zurück - aber warum?

Als Referenz ich an dieser Erklärung einen Blick haben: https://www.periscopedata.com/blog/how-to-calculate-cohort-retention-in-sql.html

Mein Tisch

s_orders: 
ID | userID | ordertime 

eine Struktur wie

hat, würde ich ein Ergebnis erwarten, wie viele verschiedene Nutzer etwas im Allgemeinen bestellt haben und wie viele haben in den letzten 90 Tagen wieder etwas bestellt, um die Kundenbindung zu erhalten.

Weiß jemand, was mache ich falsch in MySQL?

+0

Ich folge nicht Ihrer Frage. Sie sollten Ihre Frage bearbeiten und Beispieldaten zu Ihrer erwarteten Ausgabe hinzufügen. Tun Sie dies, damit andere Ihr Problem verstehen können. –

Antwort

0

DATE_SUB() gibt null zurück, wenn der Datumswert null ist, also wahrscheinlich warum. Da Sie LEFT JOIN-in sind, kann der future_orders-Datensatz null sein/nicht existent.