oracle 有一张表t,有6个字段,a1,a2,a3联合确定一条数据,b1是字符串,b2是

oracle有一张表t,有6个字段,a1,a2,a3联合确定一条数据,b1是字符串,b2是数字,c是日期,每一段时间从同一个地方抽取数据到t表,把当天的日期以类似2017... oracle
有一张表t,有6个字段,a1,a2,a3联合确定一条数据,b1是字符串,b2是数字,c是日期,每一段时间从同一个地方抽取数据到t表,把当天的日期以类似20170413的格式存在c字段,表t已经有几次抽到的数据,每次抽到的数据可能和上次的有差异,我要写的SQL就是找出每次和上次之间的差异,a3可能多了或少了,多了错误信息就填a3多了,少了就填a3少了,b1可能和上次不同,错误信息就填b1改变了,b2可能和上次大小不同,错误信息就填b2大小不同,最后查询到的结果是a1,a2,a3,e(错误信息),c,old(有差异的上次的数据),new(有差异的这次数据),大概就是这样,感觉无从下手啊,大神帮帮忙
展开
 我来答
wumingchenxin
2017-04-14 · TA获得超过1271个赞
知道大有可为答主
回答量:1491
采纳率:87%
帮助的人:241万
展开全部
1。,用日期分组,比如20170413 有10条数据,20170414 有20条数据。分成2个组。
2。 同样一张表,做两个视图,第一视图v1,分组1,2,3顺序,第二视图v2,分组1,2,3顺序,因为要把v1(旧数据)与v2(新数据)比较。所以v1.rowid+1 =v2.rowid。
3。因为新视图有多有少,那么就要一张总视图v3,包含a3,否则只能知道少了,不知道多了。
4. 做出来的试图是 v3.总a3,v1.a3, v2.a3,以及其他。
5。添加一些字段 b1change,判断,v1.b1 与 v2.b1 是否差异
添加一些字段 b2change,判断,v1.b2 与 v2.b2 是否差异
g1 = select rownum+1 rn ,t1.c from (select c from t group by c) t1 给日期分组,并编组号
g2 = select rownum rn, t1.c from (select c from t group by c) t2
v1 = select g1.rn, t.* from g1,t where g1.c=t.c 原始数据,带上组号。
v2 = select g2.rn, t.* from g2,t where g2.c=t.c
d3= (
select rn,c,a1,a2,a3 from v1
union
select rn,c,a1,a2,a3 from v2
)
d3,v1,v2合并,并取名
v3= select d3.rn,d3.c,d3.a1,d3.a2,d3.a3 , v1.rn v1rn,v1.c v1c,v1.a1 v1a1,v1.a2 v1a2,v1.a3 v1a3, v2.rn v2rn,v2.c v2c,v2.a1 v2a1,v2.a2 v2a2,v2.a3 v2a3
where
v3.rn =v1.rn(+)
and v3.c =v1.c(+)
and v3.a1 =v1.a1(+)
and v3.a2 =v1.a2(+)
and v3.a3 =v1.a3(+)
and v3.c =v2.c(+)
and v3.a1 =v2.a1(+)
and v3.a2 =v2.a2(+)
and v3.a3 =v2.a3(+)
然后,再从v3中判断有无,错误
v4 = select v3.*,
case when v3.v1a3 is null then '新a3多了'
case when v3.v2a3 is null then '新a3少了'
else '' end as a3change,
decode(v3.v1b1,v3.v2b1,'b1变了','') as b1change
decode(v3.v1b2,v3.v2b2,'b2变了','') as b2change
from v3

再把上边上面的sql 组合成一个sql语句,就行了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式