计算用户在平台上花费的时间
Calculate Time spent by users on the platform
我正在尝试计算用户每周在我的平台上花费的时间。我有以下 api_request_logs table (*注意:每一行都是重复的)
time user_id url
------------------------ ------- ----
January 6,2020, 08:56 PM 14 api\v3\user1
January 6,2020, 08:58 PM 14 api\v3\session
January 6,2020, 08:59 PM 14 api\v3\notification
January 6,2020, 09:01 PM 14 api\v3\announcements
January 6,2020, 09:02 PM 14 api\v3\user2
January 6,2020, 09:28 PM 14 api\v3\session
[enter image description here][1]
我试过这个查询,但是,它似乎没有输出正确的计算结果。
select SUM(timespent) timespent, a.user_id as user
from (
select timestamp_diff(max(time),min(time),minute) timespent, DATE_TRUNC(EXTRACT(date from time), day) as Time, a.user_id as user
from (
select * , (countif (start) over (order by time)) as grp from (
select *, ifnull (lag(url) over(order by time), '') !=url as start from logs.api_request_logs a
INNER JOIN logs.cohort_members on a.user_id = cohort_members.user_id
INNER JOIN `logs.cohorts` on cohort_members.cohort_id = `logs.cohorts`.cohort_id
INNER Join logs.users on cohort_members.user_id = users.user_id
WHERE a.user_id = 14 and time > timestamp ('2020-01-01 00:00:00')
)) group by user, grp)
group by 2
order by 2 asc
当前输出:
timespent users Time
--------- ------- -----
32 min 14 January 6,2020, 12:00 AM
期望的输出:
Timespent users Time
---------- -------- -----
6 min 14 January 6,2020, 12:00 AM
我做错了什么或者你有更好的主意吗?谢谢
我认为您也想按 url 分组...尝试以下操作:-)
#standardsql :
SELECT
SUM(timespent) timespent,
a.user_id AS user
FROM (
SELECT
TIMESTAMP_DIFF(MAX(time),MIN(time),minute) timespent,
DATE_TRUNC(EXTRACT(date FROM time), day) AS Time,
a.user_id AS user
,url
FROM (
SELECT
*,
(countif (start) OVER (ORDER BY time)) AS grp
FROM (
SELECT
*,
ifnull (LAG(url) OVER(ORDER BY time),
'') !=url AS start
FROM
logs.api_request_logs a
INNER JOIN
logs.cohort_members
ON
a.user_id = cohort_members.user_id
INNER JOIN
`logs.cohorts`
ON
cohort_members.cohort_id = `logs.cohorts`.cohort_id
INNER JOIN
logs.users
ON
cohort_members.user_id = users.user_id
WHERE
a.user_id = 14
AND time > timestamp ('2020-01-01 00:00:00') ))
GROUP BY
user,
gr,url)
GROUP BY
2
ORDER BY
2 ASC
我正在尝试计算用户每周在我的平台上花费的时间。我有以下 api_request_logs table (*注意:每一行都是重复的)
time user_id url
------------------------ ------- ----
January 6,2020, 08:56 PM 14 api\v3\user1
January 6,2020, 08:58 PM 14 api\v3\session
January 6,2020, 08:59 PM 14 api\v3\notification
January 6,2020, 09:01 PM 14 api\v3\announcements
January 6,2020, 09:02 PM 14 api\v3\user2
January 6,2020, 09:28 PM 14 api\v3\session
[enter image description here][1]
我试过这个查询,但是,它似乎没有输出正确的计算结果。
select SUM(timespent) timespent, a.user_id as user
from (
select timestamp_diff(max(time),min(time),minute) timespent, DATE_TRUNC(EXTRACT(date from time), day) as Time, a.user_id as user
from (
select * , (countif (start) over (order by time)) as grp from (
select *, ifnull (lag(url) over(order by time), '') !=url as start from logs.api_request_logs a
INNER JOIN logs.cohort_members on a.user_id = cohort_members.user_id
INNER JOIN `logs.cohorts` on cohort_members.cohort_id = `logs.cohorts`.cohort_id
INNER Join logs.users on cohort_members.user_id = users.user_id
WHERE a.user_id = 14 and time > timestamp ('2020-01-01 00:00:00')
)) group by user, grp)
group by 2
order by 2 asc
当前输出:
timespent users Time
--------- ------- -----
32 min 14 January 6,2020, 12:00 AM
期望的输出:
Timespent users Time
---------- -------- -----
6 min 14 January 6,2020, 12:00 AM
我做错了什么或者你有更好的主意吗?谢谢
我认为您也想按 url 分组...尝试以下操作:-)
#standardsql :
SELECT
SUM(timespent) timespent,
a.user_id AS user
FROM (
SELECT
TIMESTAMP_DIFF(MAX(time),MIN(time),minute) timespent,
DATE_TRUNC(EXTRACT(date FROM time), day) AS Time,
a.user_id AS user
,url
FROM (
SELECT
*,
(countif (start) OVER (ORDER BY time)) AS grp
FROM (
SELECT
*,
ifnull (LAG(url) OVER(ORDER BY time),
'') !=url AS start
FROM
logs.api_request_logs a
INNER JOIN
logs.cohort_members
ON
a.user_id = cohort_members.user_id
INNER JOIN
`logs.cohorts`
ON
cohort_members.cohort_id = `logs.cohorts`.cohort_id
INNER JOIN
logs.users
ON
cohort_members.user_id = users.user_id
WHERE
a.user_id = 14
AND time > timestamp ('2020-01-01 00:00:00') ))
GROUP BY
user,
gr,url)
GROUP BY
2
ORDER BY
2 ASC