首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在'x‘日期之后没有事务的用户列表

在'x‘日期之后没有事务的用户列表
EN

Stack Overflow用户
提问于 2018-09-11 02:01:44
回答 3查看 47关注 0票数 0

我有一个需要创建的查询,它从三个不同的表中提取数据。本质上,最终结果是提取自2018年7月1日以来在用户帐户上没有任何活动的用户的数据,但他们必须具有“x”帐户计划。有没有办法处理我创建的这个查询,让它显示我需要的内容?也许以某种方式将其与TRANDATE列上的计数0相关联?非常迷失在这里,需要一些帮助!

代码语言:javascript
运行
复制
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;

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

EN

回答 3

Stack Overflow用户

发布于 2018-09-11 02:48:57

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

代码语言:javascript
运行
复制
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上执行commit,并且(b)当WHERE子句中包含左/外连接的列(psp.ACTIVE = 1)时,该连接是内连接。

票数 1
EN

Stack Overflow用户

发布于 2018-09-11 02:57:20

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

代码语言:javascript
运行
复制
select p.ID as ID, p.LAST as LastName, p.FIRST as FirstName
from gl inner join
     p
     on p.ID = gl.PID inner join
     psp
     on psp.PLANNUM = gl.ACCNUM
where gl.ACCNUM = 'x' and psp.ACTIVE = 1
group by p.ID, p.LAST, p.FIRST
having max(gl.TRANDATE) <= date '2018-07-01';

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

票数 1
EN

Stack Overflow用户

发布于 2018-09-11 02:43:34

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

代码语言:javascript
运行
复制
   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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52263179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档