私は2つのテーブルを持っています
ユーザー
id email
-------------------------------------------------------------
1 [email protected]
2 [email protected]
user_session_logs
id user_id start_timestamp end_timestamp
-------------------------------------------------------------
1 1 2016-01-01 12:00:00 2016-01-01 13:00:00
2 2 2016-01-01 14:00:00 2016-01-01 15:00:00
3 2 2016-02-03 06:00:00 2016-02-03 06:30:00
4 1 2016-03-03 05:00:00 2016-03-03 06:00:00
5 1 2016-04-03 07:00:00 2016-04-03 08:30:00
ログインインスタンス(最初のログイン、2番目のログインなど)によって階層化されたセッション期間の分布を計算したいと思います。したがって、上記のデータを考慮して、取得したい
結果
login_instance average_session_duration_minutes
-------------------------------------------------------------
1 60 (this is the average of all user's 1st session duration)
2 45 (this is the average of all user's 2nd session duration)
3 90 (this is the average of all user's 3rd session duration)
mysqlクエリでこれをどのように行うことができるかについてのアイデアはありますか?
これは、副選択を使用して、同じuser_idの以前のエントリ(つまり、user_session_log idが小さい)の数をカウントすることにより、ログインインスタンスをカウントすることで実現できます。
SELECT login_instance, AVG(session_duration_minutes) AS average_session_duration_minutes
FROM
(SELECT *,
(SELECT COUNT(*)
FROM user_session_logs usl2
WHERE usl2.user_id = usl.user_id AND usl2.id <= usl.id) AS login_instance,
TIMESTAMPDIFF(MINUTE, start_timestamp, end_timestamp) AS session_duration_minutes
FROM user_session_logs usl) subq
GROUP BY login_instance;
こちらのデモをご覧ください:http://rextester.com/VVT36119
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加