0

pgadminIII / postgresql を使用して、ユーザー ログイン セッションの毎日の保持を計算しようとしています。

table1user_idfirst_login_date、_last_login_date

CREATE TABLE table1 (user_id numeric, first_login_date date, last_login_date date);

  INSERT INTO table1 (user_id, first_login_date, last_login_date) VALUES (12346, '2010-06-01', '2010-06-02'),
(67890, '2010-03-01', '2010-03-10'),
(67890, '2010-03-01', '2010-03-10'),
(90123, '2010-08-01', '2010-08-15'),
(45678, '2010-08-01', '2010-08-20'),
(76543, '2010-07-01', '2010-07-01');

table2user_idsession_id、_login_date

CREATE TABLE table2 (user_id numeric, session_id numeric, login_date date);

INSERT INTO table2 (user_id, session_id, login_date) VALUES
(12346, '8764', '2010-06-02'),
(67890, '4657', '2010-03-05'),
(90123, '3945', '2010-08-09'),
(45678, '20845', '2010-08-02'),
(67890, '29384', '2010-03-07'),
(90123, '3424', '2010-08-12'),
(45678, '349284', '2010-08-10');

に一部重複がありますtable1。このため、2 日間の保持と 5 日間の保持を持つユーザーを計算するクエリが正しいかどうかはわかりません。

2日間使用しているクエリは次のとおりです。

SELECT table1.user_id, first_login_date, table2.login_date,
(table2.login_date - table1.first_login_date) as datediff, FROM table1
JOIN table2 ON table2.user_id = table2.user_id WHERE
(table2.login_date - table1.first_login_date) = 1;

これにより、2 日間の保持で 7 人のユーザーの結果が得られます

ただし、次のようなdistinct句を追加すると:

SELECT distinct table1.user_id, first_login_date, table2.login_date,
    (table2.login_date - table1.first_login_date) as datediff FROM table1
    JOIN table2 ON table2.user_id = table2.user_id WHERE
    (table2.login_date - table1.first_login_date) = 1;

2 日間の保持で 3 人のユーザーの結果が得られます。

1 日のリテンションの計算については、こちらこちらこちらを参考にしましたが、私の手法で正しい結果が得られるかどうかわかりません。たとえば、DAU を計算するには、 の方が適切です。self-join

データが与えられた場合、定義したクエリを使用table1table2て 2 日間の保持結果は正確ですか? このリテンションを計算する最適な方法はありますか?

4

1 に答える 1