大家好
我有个数据库的问题想请教大家一下
有一个表Tab1
结构如下

TagName Date Value
AA 2015/8/29 100
BB 2015/8/30 101
CC 2015/8/31 102
AA 2015/9/1 103
AA 2015/9/2 104
CC 2015/9/3 105
CC 2015/9/4 106
BB 2015/9/5 107
AA 2015/9/6 108现在想创建一个视图在这个表的基础上再加一列 如下TagName Date      Value       OldValue
AA 2015/8/29 100 NULL
BB 2015/8/30 101 NULL
CC 2015/8/31 102 NULL
AA 2015/9/1 103 100
AA 2015/9/2 104 103
CC 2015/9/3 105 102
CC 2015/9/4 106 105
BB 2015/9/5 107 101
AA 2015/9/6 108 104其中OldValue的值是当前Tagname上一次的Value的值
如果上一次的值没有则为NULL!
请大家帮忙看看怎么创建这个试图!谢谢!

解决方案 »

  1.   

    create table test ( tag varchar(5) , cdate datetime , value int)
    go
    insert into test values
    ('AA', '2015/8/29' ,100),
    ('BB', '2015/8/30' ,101),
    ('CC', '2015/8/31' ,102),
    ('AA', '2015/9/1' ,103),
    ('AA', '2015/9/2' ,104),
    ('CC', '2015/9/3' ,105),
    ('CC', '2015/9/4' ,106),
    ('BB', '2015/9/5' ,107),
    ('AA', '2015/9/6' ,108)
    go
    select * from test 
    go
    create view test_view 
    as
    select * ,
    (select top 1 value from test where tag = t.tag and t.cdate > cdate order by cdate desc) oldvalue
    from test t
    go
    select * from test_view 
    go
    drop table test 
    go
    drop view test_view 
    go
    (9 行受影响)
    tag   cdate                   value
    ----- ----------------------- -----------
    AA    2015-08-29 00:00:00.000 100
    BB    2015-08-30 00:00:00.000 101
    CC    2015-08-31 00:00:00.000 102
    AA    2015-09-01 00:00:00.000 103
    AA    2015-09-02 00:00:00.000 104
    CC    2015-09-03 00:00:00.000 105
    CC    2015-09-04 00:00:00.000 106
    BB    2015-09-05 00:00:00.000 107
    AA    2015-09-06 00:00:00.000 108(9 行受影响)tag   cdate                   value       oldvalue
    ----- ----------------------- ----------- -----------
    AA    2015-08-29 00:00:00.000 100         NULL
    BB    2015-08-30 00:00:00.000 101         NULL
    CC    2015-08-31 00:00:00.000 102         NULL
    AA    2015-09-01 00:00:00.000 103         100
    AA    2015-09-02 00:00:00.000 104         103
    CC    2015-09-03 00:00:00.000 105         102
    CC    2015-09-04 00:00:00.000 106         105
    BB    2015-09-05 00:00:00.000 107         101
    AA    2015-09-06 00:00:00.000 108         104(9 行受影响)
      

  2.   

    create view test_view 
    as
    select * ,(select  max(value) from Tab1 where tag=t.tag and t.cdate>cdate)  from Tab1 t
    go