sql – 在填充值时合并两个版本跟踪表
发布时间:2020-12-12 06:34:39 所属栏目:MsSql教程 来源:网络整理
导读:我有两个跟踪数据库值更改的历史记录表,使用修订ID来跟踪各个更改.例如 表格1: rev | A | B ================= 1 | 100 | 'A' 4 | 150 | 'A' 7 | 100 | 'Z' 表2: rev | C | D ================== 1 | 200 | True 5 | 0 | True 8 | 0 | False 目标是将两个表
我有两个跟踪数据库值更改的历史记录表,使用修订ID来跟踪各个更改.例如
表格1: rev | A | B ================= 1 | 100 | 'A' 4 | 150 | 'A' 7 | 100 | 'Z' 表2: rev | C | D ================== 1 | 200 | True 5 | 0 | True 8 | 0 | False 目标是将两个表合并为: rev | A | B | C | D =============================== 1 | 100 | 'A' | 200 | True 4 | 150 | 'A' | 200 | True 5 | 150 | 'A' | 0 | True 7 | 100 | 'Z' | 0 | True 8 | 100 | 'Z' | 0 | False 这个想法是,对于给定的修订,我会采用与该修订相对应的值或者低于它的最高修订版. 想到的SQL查询类似于使用约束rev1<交叉连接两个表. rev2,然后使用子查询选择行,其中rev1 = max(rev1)为每个给定的rev2;将此查询与其对应方交换rev2和rev1;最后过滤掉rev1 = rev2的副本. 问题是: 解决方法SQL Fiddleselect coalesce(t1.rev,t2.rev) rev,coalesce(a,lag(a,1) over(order by coalesce(t2.rev,t1.rev))) a,coalesce(b,lag(b,t1.rev))) b,coalesce(c,lag(c,1) over(order by coalesce(t1.rev,t2.rev))) c,coalesce(d,lag(d,t2.rev))) d from t1 full join t2 on t1.rev = t2.rev order by rev (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |