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

PostgreSQL:日付に基づいてリピーターを特定する-結合またはウィンドウ関数?

    まず、event_sequenceを削除します DISTINCTを使用 (すべてのイベントが同じ日にあると仮定して)、ウィンドウ関数leadを使用します 次の訪問日と比較してください:

    SELECT visitor_id,
           session_id,
           COALESCE(
              lead(d_date) OVER w - d_date,
              10
           ) < 7 AS revisited,
           d_date
    FROM (SELECT DISTINCT visitor_id,
                          session_id,
                          d_date
          FROM "table"
         ) t
    WINDOW w AS (PARTITION BY visitor_id
                 ORDER BY d_date
                 ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
                )
    ORDER BY visitor_id, session_id;
    
    ┌────────────┬────────────┬───────────┬────────────┐
    │ visitor_id │ session_id │ revisited │   d_date   │
    ├────────────┼────────────┼───────────┼────────────┤
    │          1 │          1 │ t         │ 2017-01-01 │
    │          1 │          2 │ f         │ 2017-01-05 │
    │          1 │          3 │ t         │ 2017-01-20 │
    │          1 │          4 │ f         │ 2017-01-25 │
    │          2 │          1 │ t         │ 2017-01-02 │
    │          2 │          2 │ f         │ 2017-01-02 │
    │          2 │          3 │ f         │ 2017-01-18 │
    └────────────┴────────────┴───────────┴────────────┘
    (7 rows)
    



    1. この自己結合クエリをmysqlで作成する方法

    2. PHPコードを使用してmysqlテーブルをCSVにエクスポートします

    3. PL/pgSQL関数のintリテラルとintパラメータの違いを理解する

    4. ストアドプロシージャは2つの異なるデータベースで機能しますか? 2台のサーバーはどうですか?