sql >> データベース >  >> RDS >> PostgreSQL

内部結合から見つかった最も早い日付で数えますか?

    次のクエリを使用できます:

    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   
    

    NOT EXISTSを使用しました オペレーターは、「自分で支払う」顧客に関連するレコードを除外します(それが本当にあなたの意図である場合)。

    MIN(created_at)を取得したら customer_idごとの日付 、その後、外部クエリで日付ごとに簡単にカウントできます。

    デモはこちら




    1. 〜7,000,000レコードを含む単一のテーブルの複数の列でgroup-byを完了するための最適なOracleSQLクエリ

    2. SQLで各グループの最大行を選択する方法

    3. 動的列Jdbc/Mysqlを含むテーブルに値を挿入する方法

    4. mysqlを使用したノードjsのネストされたクエリ