私は1日、7日、および2週間の保持率を計算しようとしていますが、私は立ち往生しています。 users
というテーブルには、最初のログイン日があります。 logins
という表には、その後のすべてのログイン日があります。SQLを使用して保存を計算するにはどうすればよいですか?
私の考えは、logins
テーブルから「最大」または最新のログインを見つけて、ユーザーの最初のログイン以降の日数を確認することでした。最終的には、最初のログイン日までにグループ化し、1日後、7日後、14日後にアプリにログインしたこの「コホート」のユーザー数をカウントします。私は近くにいるように感じるが、そこにはあまりない。
以下は私が今までに持っているものです。
DESCRIBE users;
Field Type Null Key Default Extra
---------------- ----------- ---- --- ------------------- ---------------------------
uid int(11) YES MUL (null)
device_id varchar(64) YES (null)
install_ts timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
firstlogin_ts timestamp NO 0000-00-00 00:00:00
firstpurchase_ts timestamp NO 0000-00-00 00:00:00
DESCRIBE logins;
Field Type Null Key Default Extra
----------- ----------- ---- --- ----------------- ---------------------------
uid int(11) NO (null)
device_id varchar(64) NO (null)
login_ts timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
login_count int(11) NO (null)
level int(11) NO (null)
SELECT logins.uid,
MAX(CAST(login_ts AS Date)) AS login_dt,
CAST(firstlogin_ts AS Date) AS firstlogin_dt,
MAX(DATEDIFF(CAST(login_ts AS Date),
CAST(firstlogin_ts AS Date))) AS retentionDays
FROM logins
LEFT JOIN users
ON logins.uid = users.uid
GROUP BY logins.uid
ORDER BY logins.uid, login_dt
uid login_dt firstlogin_dt retentionDays
------ ---------- ------------- -------------
121043 2015-01-04 (null) (null)
121044 2015-01-04 (null) (null)
121045 2015-01-06 2015-01-01 5
121046 2015-01-05 2015-01-01 4
121047 2015-01-04 2015-01-01 3
121049 2015-01-05 2015-01-01 4
121050 2015-01-02 2015-01-01 1
121054 2015-01-04 2015-01-01 3
121055 2015-01-15 2015-01-01 14
121056 2015-01-07 2015-01-01 6
121057 2015-01-12 2015-01-01 11
121058 2015-01-02 2015-01-01 1
121060 2015-01-11 2015-01-01 10
121063 2015-01-07 2015-01-01 6
121065 2015-01-05 2015-01-01 4
121066 2015-01-07 2015-01-01 6
121067 2015-01-03 2015-01-01 2
121069 2015-01-03 2015-01-01 2
121070 2015-01-06 2015-01-01 5
ご迷惑をおかけして申し訳ございません。
これはうまくいきました。どうもありがとうございます@rlanvin。クエリ内のクエリ(これはサブクエリと呼ばれていると思います)を「入れ子にする」(それを呼び出すのは何ですか?) – user2205916
@ user2205916これは、派生テーブル、または単に「FORM句のサブクエリ」と呼ばれています。 – rlanvin