Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 尝试分析两个时间间隔-my WHERE子查询返回的行太多_Sql_Postgresql_Datetime - Fatal编程技术网

Sql 尝试分析两个时间间隔-my WHERE子查询返回的行太多

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

我想从public.statistics表中提取属于特定时间间隔的id_hand的所有案例。date_played是timestamp类型的变量。在schema_b.table_80perc中,有两个数据点date_为id_player 789播放,这些数据点表示public.statistics中两个时间间隔的“开始时间”,我对此很感兴趣

因此,我认为我得到了以下错误:

由用作表达式的子查询返回的多行

我怎么可能解决这个问题呢

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应该只传递一个值,而不是整个数据集。为了帮助您获得预期结果,您应该添加示例数据和预期输出