问题描述
表1: 交易
字段: AGENT_ID、TRNX_AMT、INSERTED_ON
表2: 代理 _ 详细信息
字段: AGNET_ID、名称、状态
代理表上的数据
在我解决问题之前的一些历史记录,代理将发布事务,每个事务都在事务表上更新。
我的问题是我需要确定在任何给定月份连续5天没有执行任何交易的代理列表。
寻求帮助以构建查询,这将有助于识别连续5天未执行交易的代理,并给我们此结果
代理id,天数
1111,1
2222,2
对于AGNET_ID-1111其1天2月12日
对于AGNET_ID-2222它的2天-19日和2月26日
字段: AGENT_ID、TRNX_AMT、INSERTED_ON
create table TRANSACTION (AGENT_ID varchar2(10), TRN_AMT number(4,2),INSERTED_ON date);复制
表2: 代理 _ 详细信息
字段: AGNET_ID、名称、状态
create table AGENT_DETAILS(AGENT_ID varchar2(10), NAME varchar2(20),STATUS varchar2(10)); Data on TRANSACTION table insert into TRANSACTION values( '1111',50.00,to_date('02-FEB-17')); insert into TRANSACTION values( '1111',50.00,to_date('03-FEB-17')); insert into TRANSACTION values( '2222',10.00,to_date('03-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('06-FEB-17')); insert into TRANSACTION values( '1111',15.00,to_date('06-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('07-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('08-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('09-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('10-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('11-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('12-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('13-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('13-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('14-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('15-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('16-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('17-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('18-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('19-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('20-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('23-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('24-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('26-FEB-17')); insert into TRANSACTION values( '1111',40.00,to_date('27-FEB-17')); insert into TRANSACTION values( '2222',40.00,to_date('27-FEB-17'));复制
代理表上的数据
insert into AGENT_DETAILS values ('1111','Test1','ACTIVE'); insert into AGENT_DETAILS values ('2222','Test2','ACTIVE');复制
在我解决问题之前的一些历史记录,代理将发布事务,每个事务都在事务表上更新。
我的问题是我需要确定在任何给定月份连续5天没有执行任何交易的代理列表。
寻求帮助以构建查询,这将有助于识别连续5天未执行交易的代理,并给我们此结果
代理id,天数
1111,1
2222,2
对于AGNET_ID-1111其1天2月12日
对于AGNET_ID-2222它的2天-19日和2月26日
专家解答
您可以使用lag() 查找代理的上一个交易的日期。因此,要查找两个事务之间的天数,请从inserted_on中减去lag():
然后过滤这个差异> = 5的结果。并按agent_id分组并计数:
PS: 记住在日期中使用4位数年份!
inserted_on - lag(inserted_on) over (partition by agent_id order by inserted_on)复制
然后过滤这个差异> = 5的结果。并按agent_id分组并计数:
with diffs as ( select t.*, inserted_on - lag(inserted_on) over (partition by agent_id order by inserted_on) d from transaction t order by agent_id, inserted_on ) select agent_id, count(*) from diffs where d >= 5 group by agent_id; AGENT_ID COUNT(*) 1111 1 2222 2复制
PS: 记住在日期中使用4位数年份!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
534次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
503次阅读
2025-04-15 17:24:06
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
412次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
412次阅读
2025-04-01 15:56:03
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
398次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
394次阅读
2025-04-01 11:08:44
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
355次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
353次阅读
2025-04-08 23:57:08
oracle定时任务常用攻略
virvle
321次阅读
2025-03-25 16:05:19
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
320次阅读
2025-04-15 14:48:05