问题描述
亲爱的克里斯,
我有这样的表
这里的账号是用一个开业日期生成的。规则是,当您开户时,账号和开户日期应该大于之前的账号和日期。但是顺序已经打破了一些方式。所以我需要一个sql查询,找到违反规则的帐号和日期。
例如,我需要通过查询输出1236,1237,1238,1240帐号和打开日期,因为这些帐户违反了规则。我在表中有数千个帐号和开放日期。所以我需要找到那些违反规则的账户和开户日期。
我已经使用了您给出的查询。查询为:
但问题是这个查询只返回不匹配开始的地方。此查询仅给出->> 1236 23/04/2017。
但是我也需要找到另一个帐户。请帮帮我。
我有这样的表
Account_number Opening_date 1234 16/05/2017 1235 16/05/2017 1236 23/04/2017 1237 25/04/2017 1238 25/04/2017 1239 26/05/2017 1240 11/05/2017复制
这里的账号是用一个开业日期生成的。规则是,当您开户时,账号和开户日期应该大于之前的账号和日期。但是顺序已经打破了一些方式。所以我需要一个sql查询,找到违反规则的帐号和日期。
例如,我需要通过查询输出1236,1237,1238,1240帐号和打开日期,因为这些帐户违反了规则。我在表中有数千个帐号和开放日期。所以我需要找到那些违反规则的账户和开户日期。
我已经使用了您给出的查询。查询为:
WITH RAW_DATA AS ( SELECT * FROM ACC3 ), PREV_DATA AS ( SELECT R.*, LAG(ACCOUNT_OPENDATE,1) OVER (ORDER BY ACCOUNT_NUMBER) PREV_DATE FROM RAW_DATA R ) SELECT * FROM PREV_DATA WHERE ACCOUNT_OPENDATE < PREV_DATE;复制
但问题是这个查询只返回不匹配开始的地方。此查询仅给出->> 1236 23/04/2017。
但是我也需要找到另一个帐户。请帮帮我。
专家解答
所以你想找到第一个打破序列之后的所有行?
如果是这样,您可以有一个大小写表达式来检查当前日期何时小于先前按id排序的日期。然后返回这些的最小值。
最后返回当前id为> = 以上计算值的所有行:
如果是这样,您可以有一个大小写表达式来检查当前日期何时小于先前按id排序的日期。然后返回这些的最小值。
最后返回当前id为> = 以上计算值的所有行:
with rws as ( select 1 id, date'2015-01-01' dt from dual union all select 2 id, date'2017-01-01' dt from dual union all select 3 id, date'2016-01-01' dt from dual union all select 4 id, date'2018-01-01' dt from dual ), prev as ( select r.*, lag(dt) over (order by id) prev_dt from rws r ), diff as ( select p.*, min(case when dt < prev_dt then id end) over () diff_id from prev p ) select * from diff where id >= diff_id; ID DT PREV_DT DIFF_ID 3 01-JAN-2016 00:00:00 01-JAN-2017 00:00:00 3 4 01-JAN-2018 00:00:00 01-JAN-2016 00:00:00 3复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1447次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
878次阅读
2025-03-17 11:33:53
RAC 19C 删除+新增节点
gh
538次阅读
2025-03-14 15:44:18
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
494次阅读
2025-03-13 14:38:19
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
425次阅读
2025-03-12 21:27:56
Oracle DataGuard高可用性解决方案详解
孙莹
366次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
311次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
279次阅读
2025-04-08 09:12:48
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
266次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
264次阅读
2025-03-19 14:41:51