postgresql 已取消且在五天内没有“已拒绝”或“已批准”申请的客户

k4emjkb1  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(93)

我有表:
| 客户端ID|日期|解析度|
| - -|- -|- -|
| 一个|2022年10月15日|已取消|
| 2个|2022年10月25日|已取消|
| 三个|2022年10月16日|已取消|
| 三个|2022年10月17日|已拒绝|
| 四个|2022年10月8日|已取消|
| 四个|2022年10月20日|已批准|
| 五个|2022年10月3日|已取消|
| 五个|2022年10月4日|已批准|
预期结果:
| 客户端ID|
| - -|
| 一个|
| 2个|
| 四个|
我需要获得所有已取消的客户ID,并且在五天内没有拒绝或批准申请。我如何才能做到这一点?

wz8daaqr

wz8daaqr1#

SELECT * FROM table t1
WHERE t1.Resolution = 'CANCELLED'
AND NOT EXISTS
(
   SELECT * FROM table t2
   WHERE t1.client_id = t2.client_id
   AND t2.Resolution IN ('REJECTED', 'APPROVED')
   t2.date < t1.date + interval '5 days'
)
xesrikrc

xesrikrc2#

解决方案:

select t1.client_id
from yourtable t1
left join yourtable t2
on t1.client_id = t2.client_id and
   t1.Resolution = 'CANCELLED' and
   t2.Resolution in ('REJECTED', 'APPROVED') and
   t2.date < t1.date + interval '5 days'
where t2.client_id is null

说明:我们搜索所有已取消的t1记录,并且在t2中没有被拒绝或批准的匹配项,因此,连接条件搜索具有此类对的项,如果t1没有此类对,则默认为t2.* 为空,然后应用where过滤器,在结果中仅留下不具有此类对的t1记录。

相关问题