Sql 尝试分析两个时间间隔-my WHERE子查询返回的行太多
我想从public.statistics表中提取属于特定时间间隔的id_hand的所有案例。date_played是timestamp类型的变量。在schema_b.table_80perc中,有两个数据点date_为id_player 789播放,这些数据点表示public.statistics中两个时间间隔的“开始时间”,我对此很感兴趣 因此,我认为我得到了以下错误: 由用作表达式的子查询返回的多行 我怎么可能解决这个问题呢Sql 尝试分析两个时间间隔-my WHERE子查询返回的行太多,sql,postgresql,datetime,Sql,Postgresql,Datetime,我想从public.statistics表中提取属于特定时间间隔的id_hand的所有案例。date_played是timestamp类型的变量。在schema_b.table_80perc中,有两个数据点date_为id_player 789播放,这些数据点表示public.statistics中两个时间间隔的“开始时间”,我对此很感兴趣 因此,我认为我得到了以下错误: 由用作表达式的子查询返回的多行 我怎么可能解决这个问题呢 SELECT id_hand FROM public.statis
SELECT id_hand
FROM public.statistics
WHERE id_player = 789
AND date_played between (SELECT date_played
FROM schema_b.table_80perc)
and (SELECT date_played
FROM schema_b.table_80perc) + interval '5 minutes'
编辑:样本数据
公共统计
模式b.表\U 80perc
schema_b.table_80perc是public.statistics的子集
在本例中,我最终需要public.statistics中的所有id.hand
05:34:12+5分钟
05:47:10+5分钟
我以后需要为其他玩家id自动执行此操作,所以我需要使用这两个表自动执行此操作 这有点可疑,但根据您提供的数据,这应该可以:
SELECT id_hand
FROM public.statistics s
WHERE id_player = 789
AND date_played between (SELECT min(date_played) + interval '5 minutes'
FROM schema_b.table_80perc t
where t.id_player = s.id_player)
and (SELECT max(date_played) + interval '5 minutes'
FROM schema_b.table_80perc
where t.id_player = s.id_player)
您可以使用EXISTS子查询:
SELECT id_hand
FROM public.statistics AS ps
WHERE id_player = 789
AND EXISTS (
SELECT 1
FROM schema_b.table_80perc AS ss
WHERE ss.id_player = ps.id_player
AND ps.date_played >= ss.date_played
AND ps.date_played < ss.date_played + INTERVAL '5 minutes'
)
请向我们展示表格的样本数据。我想说的第一件事是:WHERE子句中的SELECT应该只传递一个值,而不是整个数据集。为了帮助您获得预期结果,您应该添加示例数据和预期输出