zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    百度搜索时加上 (要屏蔽的内容),你会回来感谢我的。
    layui中不全的组件
    PHP使用gd库做的图像处理
    范用户体验相关BLOG
    视频聊天室软件的技术标准
    QTP11使用DOM XPath以及CSS识别元素对象
    跟我一起学Oracle 11g【11】Oracle 中的事务
    一点关于 mybatis 的记录
    git撤销本地commit,复原本地代码与服务器同步
    中国人民银行令〔2021〕第4号(征信业务管理办法)
  • 原文地址:https://www.cnblogs.com/simly/p/9502258.html
Copyright © 2011-2022 走看看