Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我如何判断用户何时同时观看一部电影和另一部电影';谁的学分?_Sql_Datetime_Time_Concurrency_Hiveql - Fatal编程技术网

Sql 我如何判断用户何时同时观看一部电影和另一部电影';谁的学分?

Sql 我如何判断用户何时同时观看一部电影和另一部电影';谁的学分?,sql,datetime,time,concurrency,hiveql,Sql,Datetime,Time,Concurrency,Hiveql,我有一个表,看起来像(用户id、电影id、开始时间戳、结束时间戳、结束原因)。电影可以因为用户关闭而结束(reason\u for_end=='user\u initiated'),也可以因为学分结束而结束(reason\u for_end=='inactive')。学分总是正好持续两个小时 我想知道一个用户开始一部新电影的总次数,而另一部电影处于信用阶段 另外,我还想知道一个用户在观看一部电影的总时间,而另一部电影的积分还在滚动 编辑: 表中给出的示例: user_id movie_id

我有一个表,看起来像
(用户id、电影id、开始时间戳、结束时间戳、结束原因)
。电影可以因为用户关闭而结束(
reason\u for_end=='user\u initiated'
),也可以因为学分结束而结束(
reason\u for_end=='inactive'
)。学分总是正好持续两个小时

我想知道一个用户开始一部新电影的总次数,而另一部电影处于信用阶段

另外,我还想知道一个用户在观看一部电影的总时间,而另一部电影的积分还在滚动

编辑: 表中给出的示例:

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'
示例结果表1:

user_id   times_new_started_while_old_in_credits
1         1
示例结果表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

似乎您只需要设置正确的自联接,或者WHERE IN或WHERE EXISTS subselect语句。但是你的问题并不完全清楚,也许你可以提供一些样本数据和基于该样本的预期结果,帮助我们理解所需的逻辑。刚刚回来,问题的更新很好,看起来Robert向你提供了一些东西,希望能让你走上正轨。你可能可以拿出和movie1.id