delete a from a join b on a.site_id=b.site_idinsert a (site_id,mvalue,dattim) 
select b.site_id,b.mvalue,b.dattim 
from b join ( select site_id,max(dattim) as mt 
              from b 
              group by site_id
            ) c 
       on b.site_id=c.site_id and b.dattim=c.mt

解决方案 »

  1.   

    --示例代码:
    declare @tb1 table (site_id int,mvalue decimal(28,2),dattim datetime)
    insert into @tb1
    select 1,        2.00,     '2004-03-06 12:56:48' union all
    select 2,        4.00,     '2004-05-08 13:23:56'
    declare @tb2 table (site_id int,mvalue decimal(28,2),dattim datetime)
    insert into @tb2
    select 1,        2.00,     '2004-03-06 12:56:48' union all
    select 2,        4.00,     '2004-05-08 13:23:56' union all
    select 1,        3.00,     '2004-08-09 12:12:36' union all
    select 3,        5.00,     '2004-02-02 02:21:36'
    /*
    选择B表中相同的子站ID的dattim最大的记录的相应的字段,如果这个子站ID在A表中没有,那么把这个记录插入,如果有则修改相应的直。
    执行后应该是
    A 表中一些的字段(后来的直)
    SITE_ID  mvalue   dattim
    1        3.00     2004-08-09 12:12:36
    2        4.00     2004-05-08 13:23:56
    3        5.00     2004-02-02 02:21:36
    */
    select site_id_#1=b.site_id,mvalue_#1=b.mvalue,dattim_#1=b.dattim into #1 from @tb2 b right join (select site_id,dattim=max(dattim) from @tb2 group by site_id)c on  b.site_id=c.site_id and b.dattim=c.dattim 
    select * from #1
    insert into @tb1 select site_id_#1,mvalue_#1,dattim_#1 from #1  where site_id_#1 not in (select site_id from @tb1) 
    update @tb1 set mvalue=#1.mvalue_#1,dattim=#1.dattim_#1  from #1  where site_id=#1.site_id_#1
    select * from @tb1
    drop table #1/*(所影响的行数为 2 行)
    (所影响的行数为 4 行)
    (所影响的行数为 3 行)site_id_#1  mvalue_#1                      dattim_#1                                              
    ----------- ------------------------------ ------------------------------------------------------ 
    1           3.00                           2004-08-09 12:12:36.000
    2           4.00                           2004-05-08 13:23:56.000
    3           5.00                           2004-02-02 02:21:36.000(所影响的行数为 3 行)
    (所影响的行数为 1 行)
    (所影响的行数为 3 行)site_id     mvalue                         dattim                                                 
    ----------- ------------------------------ ------------------------------------------------------ 
    1           3.00                           2004-08-09 12:12:36.000
    2           4.00                           2004-05-08 13:23:56.000
    3           5.00                           2004-02-02 02:21:36.000(所影响的行数为 3 行)
    */