我如何才能知道用户何时同时观看一部电影和另一部电影的演职员表?
How can I figure out when a user is watching both a movie and another movie's credits?
我有一个 table 看起来像 (user_id, movie_id, start_timestamp, end_timestamp, reason_for_end)
。电影可以因为用户关闭它们 (reason_for_end == 'user_initiated'
) 或因为演职员表结束 (reason_for_end == 'inactivity'
) 而结束。学分始终恰好持续两个小时。
我想知道当另一部电影处于演职员表阶段时用户开始观看新电影的总次数。
另外,我还想知道用户在观看一部电影时花费的总时间,而另一部电影的演职员表仍在滚动。
编辑:
给出的例子 table:
user_id movie_id start_timestamp end_timestamp reason_for_end
1 1 2012-11-18 05:53:36.0 2012-11-18 12:46:40.0 'inactivity'
1 2 2012-11-18 11:34:23.0 2012-12-18 13:21:57.0 'user_initiated'
示例结果 table 1:
user_id times_new_started_while_old_in_credits
1 1
示例结果 table 2:
user_id total_overlap_in_seconds
1 4320
怎么样?
您应该根据目标数据库语法调整日期时间处理。另外,我不知道您希望如何处理用户同时在多部电影之间跳转的情况 - 这取决于您 ;-)
否则,这应该可以完成工作:
SELECT movie1.user_id, count(*), sum(movie1.end_timestamp - movie2.start_timestamp)
FROM movies movie1
LEFT JOIN movies movie2
ON movie1.user_id = movie2.user_id
AND movie1.reason_for_end = 'inactivity'
WHERE movie2.start_timestamp BETWEEN movie1.end_timestamp - '2hours'::interval AND movie1.end_timestamp
AND movie1.user_id = 1 /* optional */
GROUP BY movie1.user_id
我有一个 table 看起来像 (user_id, movie_id, start_timestamp, end_timestamp, reason_for_end)
。电影可以因为用户关闭它们 (reason_for_end == 'user_initiated'
) 或因为演职员表结束 (reason_for_end == 'inactivity'
) 而结束。学分始终恰好持续两个小时。
我想知道当另一部电影处于演职员表阶段时用户开始观看新电影的总次数。
另外,我还想知道用户在观看一部电影时花费的总时间,而另一部电影的演职员表仍在滚动。
编辑: 给出的例子 table:
user_id movie_id start_timestamp end_timestamp reason_for_end
1 1 2012-11-18 05:53:36.0 2012-11-18 12:46:40.0 'inactivity'
1 2 2012-11-18 11:34:23.0 2012-12-18 13:21:57.0 'user_initiated'
示例结果 table 1:
user_id times_new_started_while_old_in_credits
1 1
示例结果 table 2:
user_id total_overlap_in_seconds
1 4320
怎么样?
您应该根据目标数据库语法调整日期时间处理。另外,我不知道您希望如何处理用户同时在多部电影之间跳转的情况 - 这取决于您 ;-)
否则,这应该可以完成工作:
SELECT movie1.user_id, count(*), sum(movie1.end_timestamp - movie2.start_timestamp)
FROM movies movie1
LEFT JOIN movies movie2
ON movie1.user_id = movie2.user_id
AND movie1.reason_for_end = 'inactivity'
WHERE movie2.start_timestamp BETWEEN movie1.end_timestamp - '2hours'::interval AND movie1.end_timestamp
AND movie1.user_id = 1 /* optional */
GROUP BY movie1.user_id