PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Conteggio in base alla prima data trovata da un inner join?

Puoi utilizzare la seguente query:

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   

Ho usato un NOT EXISTS operatore per escludere i record che si riferiscono a clienti che si "pagano da soli" (se questa è davvero la tua intenzione).

Una volta ottenuto il MIN(created_at) data per customer_id , quindi puoi facilmente contare per data in una query esterna.

Dimostrazione qui