Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 “x”日期之后没有交易记录的用户列表_Sql_Oracle - Fatal编程技术网

Sql “x”日期之后没有交易记录的用户列表

Sql “x”日期之后没有交易记录的用户列表,sql,oracle,Sql,Oracle,我需要创建一个查询,从三个不同的表中提取数据。基本上,最终结果是为自2018年1月7日以来未在用户帐户上进行任何活动的用户提取数据,但他们必须有一个帐户计划,如x。有没有办法操纵我创建的这个查询,让它显示我需要它显示的内容?也许会将它与TRANDATE列上的计数0关联起来?我在这里迷路了,需要一些帮助 select p.ID as ID, p.LAST as LastName, p.FIRST as FirstName From gl inner join p on p.ID = gl.PID

我需要创建一个查询,从三个不同的表中提取数据。基本上,最终结果是为自2018年1月7日以来未在用户帐户上进行任何活动的用户提取数据,但他们必须有一个帐户计划,如x。有没有办法操纵我创建的这个查询,让它显示我需要它显示的内容?也许会将它与TRANDATE列上的计数0关联起来?我在这里迷路了,需要一些帮助

select p.ID as ID, p.LAST as LastName, p.FIRST as FirstName
From gl
inner join p
on p.ID = gl.PID
left join psp
on psp.PLANNUM = gl.ACCNUM
where gl.ACCNUM = 'x'
and psp.ACTIVE = 1
and gl.TRANDATE <= to_date('07/01/2018', 'MM/DD/YYYY') 
;
commit;

非常感谢大家,如果还有什么我可以提供的,请告诉我

由于所有显示字段都来自p,因此可以在内部查询中对多次出现的p.id进行分组。其他所有不在的都是你感兴趣的

   select p.ID as ID, p.LAST as LastName, p.FIRST as FirstName
    From p where p.ID not in (
         select p.ID From gl
            inner join p on p.ID = gl.PID
            left join psp on psp.PLANNUM = gl.ACCNUM
            where gl.ACCNUM = 'x'
            and psp.ACTIVE = 1
            and gl.TRANDATE <= to_date('07/01/2018', 'MM/DD/YYYY')
            group by p.ID
            having count(1) >= 1)

由于所有显示字段都来自p,因此可以在内部查询中对多次出现的p.id进行分组。其他所有不在的都是你感兴趣的

   select p.ID as ID, p.LAST as LastName, p.FIRST as FirstName
    From p where p.ID not in (
         select p.ID From gl
            inner join p on p.ID = gl.PID
            left join psp on psp.PLANNUM = gl.ACCNUM
            where gl.ACCNUM = 'x'
            and psp.ACTIVE = 1
            and gl.TRANDATE <= to_date('07/01/2018', 'MM/DD/YYYY')
            group by p.ID
            having count(1) >= 1)

您并没有真正指定表结构,所以我在这里有点猜测。您的总账表是否每个PID+ACCNUM有多条记录?主键是什么?你可以提供很多额外的细节

select p.ID as ID, p.LAST as LastName, p.FIRST as FirstName, g.maxdate
From (select gl.PID, gl.ACCNUM, max(gl.TRANDATE) as maxdate
    from gl
    where gl.ACCNUM = 'x'
    group by gl.PID, gl.ACCNUM) g
inner join p
on p.ID = g.PID
inner join psp
on psp.PLANNUM = g.ACCNUM
and psp.ACTIVE = 1
where g.maxdate <= to_date('07/01/2018', 'MM/DD/YYYY') 
;

此外,a在select上不需要提交,b当WHERE子句psp.ACTIVE=1中有一列时,左/外连接是一个内部连接。

您没有真正指定表结构,所以我在这里有点猜测。您的总账表是否每个PID+ACCNUM有多条记录?主键是什么?你可以提供很多额外的细节

select p.ID as ID, p.LAST as LastName, p.FIRST as FirstName, g.maxdate
From (select gl.PID, gl.ACCNUM, max(gl.TRANDATE) as maxdate
    from gl
    where gl.ACCNUM = 'x'
    group by gl.PID, gl.ACCNUM) g
inner join p
on p.ID = g.PID
inner join psp
on psp.PLANNUM = g.ACCNUM
and psp.ACTIVE = 1
where g.maxdate <= to_date('07/01/2018', 'MM/DD/YYYY') 
;

此外,a您不需要在select上提交,b如果WHERE子句psp.ACTIVE=1中有一列,则左/外连接是一个内部连接。

我只需在having子句中使用聚合和最大值:


请注意,psp.ACTIVE上的where条件将外部联接转换为内部联接,因此为了可读性,我更改了联接类型。

我只需在having子句中使用aggregation和max:


请注意,psp.ACTIVE上的where条件将外部联接变成了内部联接,因此为了可读性,我更改了联接类型。

请输入示例和预期输出?我想输入示例与我在原始帖子中的输入类似?预期输出将是自2018年1月7日以来没有任何交易数据的用户列表。对不起,我不太清楚该怎么说清楚。从本质上说,表a中的用户列表,他们在表b上有一个计划,自2018年1月7日以来在表c上就没有使用过//示例输入将类似于我在我的原始帖子中的内容,我认为?//-不,示例输入将是您正在查询的表的数据子集,或类似的。不确定如何在此处设置表的格式,但我想这就是你要找的?表GL TRANDATE | ACCNUM 6/25/2018 6:00:22 PM 22我需要它来显示自2018年7月1日以来谁没有使用过计划22,并且该计划必须处于活动状态。请输入样本和预期输出?我想样本输入会像我在原始帖子中输入的一样?预期输出将是自2018年1月7日以来没有任何交易数据的用户列表。对不起,我不太清楚该怎么说清楚。从本质上说,表a中的用户列表,他们在表b上有一个计划,自2018年1月7日以来在表c上就没有使用过//示例输入将类似于我在我的原始帖子中的内容,我认为?//-不,示例输入将是您正在查询的表的数据子集,或类似的。不确定如何在此处设置表的格式,但我想这就是你要找的?表GL TRANDATE | ACCNUM 6/25/2018 6:00:22 PM 22我需要它来显示自2018年7月1日以来谁没有使用过计划22,并且计划必须处于活动状态。