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

  • 相关阅读:
    一组网页边栏过渡动画,创意无限!【附源码下载】
    sql查询比较两表不同数据与相同数据
    Sql中的并(UNION)、交(INTERSECT)、差(minus)、除去(EXCEPT)详解
    防盗链基本原理(web安全测试实例二)
    篡改请求数据 或响应数据(web安全测试 实例三)
    【转】思维导图编写测试用例的两种格式
    【转】流媒体与直播技术
    Jmeter接口测试 不同的content-type传入参数方式(一)
    md5算法的java实现
    sql server 2008导出数据至Excel或者wps
  • 原文地址:https://www.cnblogs.com/simly/p/9502258.html
Copyright © 2011-2022 走看看