PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comptage par date la plus ancienne trouvée à partir d'une jointure interne ?

Vous pouvez utiliser la requête suivante :

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   

J'ai utilisé un NOT EXISTS opérateur pour exclure les enregistrements liés aux clients "payant pour eux-mêmes" (si telle est vraiment votre intention).

Une fois que vous obtenez le MIN(created_at) date par customer_id , vous pouvez facilement compter par date dans une requête externe.

Démo ici