ORCLE 查询一段时间(时间点不定,时差确定)内符合一定条件的数据
应用场景:
例如:银行需要监控柜员们操作,在一天中,如果同一柜员半小时内办理业务的数量超过了五条,则视为涉嫌违规操作,咋看貌似很简单,但细细一分析,好像也不是那么容易,因为只知道时间差为半小时,没有一个具体基准时间作标准.........废话不多说,直接上我的分析和SQL语句。
1:按添加数据时的时间排序(正序)增加一列自增序列
2:根据序列自关联查询任意两条数据插入间隔差为5的数据,组成一个新表
3:根据生成的这个新表,查询出时间间隔差大于30分钟的数据
4:查时间间隔差大于30分钟的数据的总数
5:现在就可以根据总数是否大于0判断柜员是否有违规操作了,OK,大功告成!想得比较简单,不知道对大量数据场景下查询效率如何
最终语句:
select count(xulie1) from (
select c1.xulie xulie1,c1.ctime ctime1,c2.xulie xulie2,c2.ctime ctime2 from
(select Row_Number() over ( order by ctime ) as xulie , t.ctime from ceshi t) c1 left join
(select Row_Number() over ( order by ctime ) as xulie , t.ctime from ceshi t) c2 on
c1.xulie + 4 = c2.xulie) t2
where t2.ctime2 - ctime1 > 30/(24*60)
(附:本人小白,刚入行,正尝试写博客,如内容有错误、不规范或需要优化的地方,或有其他解决方法,希望各路大神们指点指点,谢谢!!!)
具体步骤如下:
1:测试所用原始表数据
2:按时间排序(正序)增加序列
3:根据序列自关联查询任意两条数据插入间隔差为5的数据,组成一个新表
4:根据生成的这个新表,查询出时间间隔差大于30分钟的数据
5:查时间间隔差大于30分钟的数据的总数