我有一个像这样的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查询。
答案 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;