MySQL计算用户在网站上花费的时间

时间:2014-03-04 13:55:14

标签: mysql sql

我有一个像这样的MySQL表:

+-----+---------+-------+------------+
|  Id |  UserId |  Page |  Timestamp |
+-----+---------+-------+------------+

它包含用户加载的每个页面的行:

+-------+--------+---------+--------------+
|     1 |  user1 |  page_x |  1393940340  |
|     2 |  user1 |  page_x |  1393940348  |
|     3 |  user1 |  page_x |  1393940390  |
|     4 |  user2 |  page_x |  1393940740  |
|     5 |  user2 |  page_x |  1393940781  |
|     6 |  user3 |  page_x |  1393910220  |
|     7 |  user1 |  page_x |  1393945555  |
|     8 |  user1 |  page_x |  1393945565  |
+-------+--------+---------+--------------+

我想计算每位用户在网站上花费的时间。 正如你所看到的那样,第1行,第2行和第3行(由user1访问过)很容易计算,因为用户花了50秒然后在第7行,同一个用户稍后返回该网站,如果我像往常一样继续计算它会说用户花了几个小时或几天而不是60秒。

任何人都知道如何克服这个问题?

我可能会添加一些限制,比如从一个页面到另一个页面花费的时间超过20分钟,然后不计算,但我不确定如何将其添加到MySQL查询。

1 个答案:

答案 0 :(得分:1)

你可以做这样的事情,它可以为你提供一些解决问题的线索:

SELECT USERID,SUM(RES) RESULT FROM
(SELECT T1.USERID,
CASE WHEN T1.USERID = T2.USERID THEN T2.TIMESTAMP - T1.TIMESTAMP ELSE 0 END RES
 FROM 
TABLE1 T1 LEFT OUTER JOIN TABLE1 T2
ON T1.ID = T2.ID - 1)TAB1
GROUP BY USERID;

SQL Fiddle