PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Zählen nach dem frühesten Datum, das von einem inneren Join gefunden wurde?

Sie können die folgende Abfrage verwenden:

SELECT CONCAT(EXTRACT(MONTH FROM startedPayingDate), '-', 
              EXTRACT(YEAR FROM startedPayingDate)) AS "Month", 
       COUNT(*) AS "Total AB Paying Customers"
FROM (       
   SELECT customer_id, MIN(created_at) AS startedPayingDate 
   FROM customerusermap AS cm
   WHERE NOT EXISTS (SELECT 1
                     FROM users AS u
                     WHERE cm.user_id = u.id)
   GROUP BY customer_id ) AS t
GROUP BY 1   

Ich habe einen NOT EXISTS verwendet Operator, Datensätze auszuschließen, die sich auf „selbstzahlende“ Kunden beziehen (falls dies wirklich Ihre Absicht ist).

Sobald Sie den MIN(created_at) erhalten Datum pro customer_id , dann können Sie in einer äußeren Abfrage problemlos pro Datum zählen.

Demo hier