• day 13 拉链数据批量处理


    delete from sdata.dbo.mo_money
    insert into sdata.dbo.mo_money
    values('make','3000','2018-06-12')
    insert into sdata.dbo.mo_money
    values('alex','400','2018-05-21')
    insert into sdata.dbo.mo_money
    values('coco','5500','2018-08-11')
    insert into sdata.dbo.mo_money
    values('liy','52000','2018-05-22')
    insert into sdata.dbo.mo_money
    values('acf','5600','2018-04-05')
    insert into sdata.dbo.mo_money
    values('kfc','600','2018-06-01')
    insert into sdata.dbo.mo_money
    values('slim','90010','2018-05-01')
    insert into sdata.dbo.mo_money
    values('smf','5800','2018-08-01')


    insert into sdata.dbo.mo_money
    values('kfc','300','2018-06-08')
    insert into sdata.dbo.mo_money
    values('slim','9010','2018-05-13')
    insert into sdata.dbo.mo_money
    values('smf','500','2018-08-11')

    select * from sdata.dbo.mo_money

    --多条数据插入 所进行的循环体--
    drop table sdata.dbo.mo_money_rn
    select *
    into sdata.dbo.mo_money_rn
    from(
    select
    name
    ,money
    ,date_stamp
    ,ROW_NUMBER() over (partition by name order by date_stamp asc) as r_nm
    from
    sdata.dbo.mo_money) a
    where r_nm =1


    delete from sdata.dbo.mo_money
    where EXISTS(
    select 1 from sdata.dbo.mo_money_rn B
    where sdata.dbo.mo_money.date_stamp = B.date_stamp
    and sdata.dbo.mo_money.name=B.name
    );

    select * from sdata.dbo.mo_money_rn

    将数据分为三种状态 一定要去重sdata.dbo.mo_money里面的数据是一条但是
    pdata.dbo.mo_money_history里面mo 的数据是两条造1对2 的情况
    drop table sdata.dbo.mo_money_falg
    select
    distinct
    a.*
    ,case when b.name is null then 1 --新增--
    when b.name IS not null and a.money <> b.money then 2 --更新--
    when b.name IS not null and a.money = b.money then 3 --不变--
    end flag
    into sdata.dbo.mo_money_falg
    from sdata.dbo.mo_money_rn a
    left join pdata.dbo.mo_money_history b
    on a.name = b.name
    select * from sdata.dbo.mo_money_falg

    --flag=1--
    drop table pdata.dbo.mo_money_history
    insert into pdata.dbo.mo_money_history
    select distinct
    a.name
    ,a.money
    ,a.date_stamp
    ,'3000-01-01'
    from
    sdata.dbo.mo_money_rn a
    inner join
    sdata.dbo.mo_money_falg b
    on a.name = b.name
    where b.flag =2 --where b.flag = 2--
    select * from pdata.dbo.mo_money_history
    order by name asc ,start_date asc
    --循环体--

    --当执行第二遍以上的时候要执行下面的代码
    --将新增数据插入到p层 进行闭连update,插入数据 --当执行flag=2要执行闭连--
    update pdata.dbo.mo_money_history
    set end_date=b.date_stamp
    from pdata.dbo.mo_money_history
    inner join
    sdata.dbo.mo_money_falg b
    on pdata.dbo.mo_money_history.name = b.name
    where b.flag = 2 and pdata.dbo.mo_money_history.end_date='3000-01-01'
    select* from pdata.dbo.mo_money_history

  • 相关阅读:
    图解Go里面的互斥锁mutex了解编程语言核心实现源码
    day04 NTFS安全权限 | 文件共享服务器
    day03 用户与组管理 | 远程管理
    关于VMware的一些资源|IOS|序列号
    day03 批处理
    day02-IP地址详解
    test1
    simulink产生周期矩形波和8421码
    矩阵连乘问题的算法复杂度的计算--卡塔兰数(Catalan数)的数学推导和近似公式
    找出"吸血鬼数"(Java)
  • 原文地址:https://www.cnblogs.com/simly/p/9502258.html
Copyright © 2020-2023  润新知