SQL:在同一个表中插入新创建的列

时间:2017-10-20 08:17:07

标签: sql sql-server-2008

我有以下表格:

create table Finance
(
       [Product] int
       ,[Timestamp] datetime
       ,[Price] numeric(16, 4)
)

INSERT INTO Finance([Product], [Timestamp], [Price])
       VALUES
              (5678, '20080101 12:00:00', 12.34)
             ,(5678, '20080101 12:01:00', NULL)
             ,(5678, '20080101 12:02:00', NULL)
             ,(5678, '20080101 12:03:00', 23.45)
             ,(5678, '20080101 12:04:00', NULL)
             ,(5679, '20080101 13:04:00', NULL)
             ,(5679, '20080101 13:05:00', 30.35)
             ,(5679, '20080101 13:06:00', NULL)

并且以下查询返回所需的输出:

SELECT ISNULL(A.Price, B.Price) N_Price -- A.Product, A.Timestamp, A.Price, 
FROM Finance A
OUTER APPLY (   SELECT TOP 1 *
            FROM Finance 
            WHERE Product = A.Product AND Timestamp < A.Timestamp
            AND Price IS NOT NULL
            ORDER BY Product, Timestamp DESC) B

我想将查询返回的列N_Price插入到原始的Finance表中。有没有简单快捷的方法,怎么做?

1 个答案:

答案 0 :(得分:0)

这应该适用于一次更新

 alter table finance add n_price numeric(16,1)


update a
set n_price=ISNULL(A.Price, B.Price)
from finance a
outer apply
(
SELECT TOP 1 price
            FROM Finance 
            WHERE Product = A.Product AND Timestamp < A.Timestamp
            AND Price IS NOT NULL
            ORDER BY Product, Timestamp DESC) B