zoukankan      html  css  js  c++  java
  • day 13拉链数据做存储

    delete from sdata.dbo.mo_money

    insert into sdata.dbo.mo_money
    values ('mo','1000','2018-06-08')
    insert into sdata.dbo.mo_money
    values ('mo','12000','2018-06-09')
    insert into sdata.dbo.mo_money
    values ('mo','3000','2018-06-20')
    insert into sdata.dbo.mo_money
    values ('mo','5000','2018-06-25')
    insert into sdata.dbo.mo_money
    values ('jerry','111000','2018-06-8')
    insert into sdata.dbo.mo_money
    values ('jerry','500','2018-06-10')
    insert into sdata.dbo.mo_money
    values ('jerry','300','2018-06-12')
    insert into sdata.dbo.mo_money
    values ('jerry','200','2018-06-13')
    insert into sdata.dbo.mo_money
    values ('jerry','201','2018-06-16')

    insert into sdata.dbo.mo_money
    values ('aaa','200','2018-06-13')
    insert into sdata.dbo.mo_money
    values ('aa','201','2018-06-16')

    delete from pdata.dbo.mo_money_history

    alter proc [dbo].[Deal_chain]
    as
    begin
    declare @i int
    declare @max_loop int

    set @i=1
    set @max_loop=(select MAX(r_n)
    from (
    select
    name
    ,money
    ,date_stamp
    ,row_number()over(partition by name order by date_stamp asc) as r_n
    from sdata.dbo.mo_money
    ) a )



    print @max_loop
    print 'ok'
    while @i<=@max_loop
    begin


    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_n
    from sdata.dbo.mo_money
    ) a
    where r_n=1


    delete from sdata.dbo.mo_money
    where EXISTS(
    SELECT 1 FROM sdata.dbo.mo_money_rn B
    WHERE sdata.dbo.mo_money.name = b.name
    and sdata.dbo.mo_money.date_stamp = b.date_stamp
    );

    drop table sdata.dbo.mo_money_flag
    select
    distinct
    a.*
    ,case when b.name IS null then 1 --新增
    when b.name IS not null and a.money<>b.money then 2 --update
    when b.name IS not null and a.money= b.money then 3 --not change
    end flag
    into sdata.dbo.mo_money_flag
    from sdata.dbo.mo_money_rn a
    left join pdata.dbo.mo_money_history b
    on a.name = b.name


    --flag=1
    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_flag b
    on a.name=b.name
    where b.flag=1


    ---flag=2
    --bilian
    update pdata.dbo.mo_money_history
    set end_date=b.date_stamp
    from
    pdata.dbo.mo_money_history
    inner join
    sdata.dbo.mo_money_flag 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'


    --charu
    insert into pdata.dbo.mo_money_history
    select
    name
    ,money
    ,b.date_stamp
    ,'3000-01-01'
    from
    sdata.dbo.mo_money_flag b
    where b.flag=2
    set @i=@i+1
    print @i
    end
    end


    exec [Deal_chain]



    select * from pdata.dbo.mo_money_history
    order by name asc ,start_date asc

  • 相关阅读:
    zookeeper logs is missing zookeeper 日志丢失
    Java Spring IoC 学习(3)
    jsp中include的两种用法
    java多态
    Referenced file contains errors
    类的初始化顺序
    PHP处理session跨域
    Apache中按天分割日志(Windows)
    redis和memcached的区别(总结)
    PHP中的traits简单理解
  • 原文地址:https://www.cnblogs.com/simly/p/9502272.html
Copyright © 2011-2022 走看看