フィールドID、PLAYER、TIMESTAMP、およびACTIONを持つMySQLテーブルLOGIN_LOGがあります。ACTION は「ログイン」または「ログアウト」のいずれかです。ログインの約 20% のみがログアウト行を伴います。そうする人のために、平均期間を計算したいと思います。
みたいなことを考えている
select avg(LL2.TIMESTAMP - LL1.TIMESTAMP)
from LOGIN_LOG LL1
inner join LOGIN_LOG LL2 on LL1.PLAYER = LL2.PLAYER and LL2.TIMESTAMP > LL1.TIMESTAMP
left join LOGIN_LOG LL3 on LL3.PLAYER = LL1.PLAYER
and LL3.TIMESTAMP between LL1.TIMESTAMP + 1 and LL2.TIMESTAMP - 1
and LL3.ACTION = 'login'
where LL1.ACTION = 'login' and LL2.ACTION = 'logout' and isnull(LL3.ID)
これが最善の方法ですか、それとももっと効率的な方法がありますか?