查询重复数据(某个字段允许指定范围内偏移)
来源:互联网 发布:python opencv cuda 编辑:程序博客网 时间:2024/06/05 04:21
前一段时间遇到一个问题,要求在pg数据库环境下编写一个sql,实现相同记录在不同商家的查询规则,因为相对于商家来说有些在a商店购入的记录会在b商店显示为卖出,而且交易的时间有时也不会完全一样,针对这样的情况,我尝试了许多次但都不能使用一个sql来实现,遂使用了临时表的方式来进行多次查询操作:
介绍下表和字段:原始表tb,字段pa1,pa2与pb1,pb2相对应不同方向的相关字段,pc为时间字段,pd为方向;
首先第一步,把所有现有的指定字段相同交易方向的重复数据剔除,不重复的数据放在临时表中备用:
drop table if exists tmp_tb1;
select * into tb from(select * ,row_number() over(partition by pa1,pa2,pb1,pb2,pc,pd order by pc)t from tb )tp where tp.t=1;
select ...into... from用来将查询的数据导入一个不存在的表;
第二步,将交易数据的改成交易方向相同的数据,交易方向保持不变:
drop table if exists tmp_tb2;
select *,row_number() over(partition by pa1,pa2,pb1,pb2,pc ,pd order by pc) t into tmp_tb2 from(select id,pb1 pa1,pb2 pa2,pa1 pb1,pa2 pb2,pc from tmp_tb1 where pd like '%进%'
union all
select id,pa1,pa2,pb1,pb2,pc,pd from tmp_tb1 where pd like '%出%')tp;
第三步,获取指定偏移时间内的数据:
drop if exists tmp_tb3;
select id,pa1,pa2,pb1,pb2,pc,pd,id1,id2,bmini,cmini into tmp_tb3 from(
select a.*,b.id id1,c.id id2,abs(extract(epoch from(a.pc-b.pc))) bmini,abs(extract(epoch from(a.pc-c.pc))) cmini from
tmp_tb2 a
left join tmp_tb2 b on a.pd<>b.pd and a.pa1=b.pa1 and a.pa2=b.pa2 and a.pb1=b.pb1 and a.pb2=b.pb2 and a.t=b.t-1
and abs(extract(epoch from(a.pc-b.pc))) between 0 and(60*$filter$)
left join tmp_tb2 c
on a.pd<>b.pd and a.pa1=c.pa1 and a.pa2=c.pa2 and a.pb1=c.pb1 and a.pb2=c.pb2 and a.t=c.t+1
and abs(extract(epoch from(a.pc-c.pc))) between 0 and(60*$filter$)
)tp where bmini is not null or cmini is not null;
上述sql中$filter$为指定偏移分钟的占位符,abs(extract(epoch from(a.pc-c.pc)))最内层epoch from配合extract可计算出指定时间的秒数,可能为负,所以取绝对值;
最后,查询最终结果:
select * from tb where id in(select id from tmp_tb3)
如果想删除这部分重复数据:
delete from tb where id in(select id from tmp_tb3 where id2 in(select id from tmp_tb3 where id1 is not null))
- 查询重复数据(某个字段允许指定范围内偏移)
- 查询数据库中某个字段重复的所有数据
- 查询表里是否有重复某个字段的数据
- oracle 查询单表某个字段 数据是否有重复
- SQL查询某个字段重复的记录
- 查询某个字段重复的sql:
- mysql删除某个字段重复的数据
- php数组某个字段数据重复问题
- mysql删除某个字段重复的数据
- 数据库查询:查询在指定时间范围内的数据
- sql 查询重复字段,查询重复数据,删除重复数据
- 查询表中某个字段不重复的所有数据的常用两种方法
- SQL查询指定时间[字符串]范围内的数据
- mongdb 查询 某个字段不存在的数据
- MySQL查询某个字段不重复的所有记录
- MySQL查询某个字段不重复的所有记录
- MySQL查询某个字段不重复的所有记录
- mysql中查询表中某个字段重复出现次数
- fastjson泛型的使用
- Tomcat NioEndpoint的SocketProcessor
- 我国科学家在暗物质探测方面取得重要进展
- PreparedStatement 使用like 模糊查询
- 科学界奥斯卡奖获奖名单揭晓 奖金达2200万美元
- 查询重复数据(某个字段允许指定范围内偏移)
- 三季度全球服务器市场持续增长 戴尔EMC HPE 浪潮居前三
- 一个listview列表的展示
- Ionic3学习笔记(十三)HttpClient 实现 HTTP 请求以及踩过的一些坑
- DNA验证个人身份只需几分钟 测序仪仅一千美元
- myeclipse写jsp页面出现问题
- PXE工作原理(有图有真相)
- Eclipse和Tomcat对JDK与JRE的使用
- 2017-12-13