2016-09-30 16 views
1

私が持っている二つのテーブルMySQLのログインインスタンスによる平均セッション時間を計算する方法は?

ユーザー

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のクエリで行うことができますどのように任意のアイデアを取得したいですか?

答えて

2

をお試しください:

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

+1

このawesomenessのおかげで! –

0

これは、同じuser_idのために以前のエントリ(すなわち、より少ないuser_session_log IDを持つ)の数をカウントすることで、ログインインスタンスをカウントする副選択を使用して達成することができる次のクエリ

​​
+0

個人ユーザーごとに価値はありませんが、私のサンプルデータに示されているように、ログインインスタンスごとに平均を探しています。 –

+0

あなたは結合クエリを実行する必要がありますか? login_instance値はどのフィールドから来ますか? –

関連する問題