PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Contando pela data mais antiga encontrada de uma junção interna?


Você pode usar a seguinte consulta:
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   

Eu usei um NOT EXISTS operador para excluir registros relacionados a clientes 'pagando por conta própria' (se essa for realmente sua intenção).

Depois de obter o MIN(created_at) data por customer_id , você poderá contar facilmente por data em uma consulta externa.

Demonstração aqui