2012-07-18 63 views
-1

替代的NA我有一个巨大的表是这样的:SQL:与去年观察

Date Price1 Price2 
1  13  14.9 
2  13.1  NULL 
3  NULL  14 
4  NULL  14.5 
5  13  14 

我要填写在NAS让我在SQL表如下所示:

Date Price1 Price2 
1  13  14.9 
2  13.1  14.9 
3  13.1  14 
4  13.1  14.5 
5  13  14 

我对SQL很陌生,请原谅。我在这里搜索,似乎你可以在R中做到这一点,但我应该怎么做在SQL中。

我正在使用Microsoft SQL Server Management。另外我似乎无法确定如何正确插入表格,但他们不会让我发布图片。所以,对格式化感到抱歉。

+0

你如何决定把NA,而不是哪个值?我看到你用13.9和Price2 NAs替换了Price1 NAs和14.9,但你是怎么得出这个确切数字的?从之前的日期前的价格? – 2012-07-18 14:15:27

+0

如果它是NA,则用最后一天的可用价格替换它。 – Zanam 2012-07-18 14:23:56

+0

那么,那么@Chandu提供的答案将完成这项工作,除非你在Sql Server 2000上。 – 2012-07-18 14:25:04

回答

1

试试这个:

UPDATE a 
    SET a.Price1 = b.Price1 
    FROM <YOUR-TABLE> a CROSS APPLY 
    (
     SELECT TOP 1 Price1 
      FROM <YOUR-TABLE> b 
     WHERE a.Date > b.Date 
      AND Price1 <> 'NA' 
      ORDER BY b.Date DESC 
    ) b 

    UPDATE a 
    SET a.Price2 = b.Price2 
    FROM <YOUR-TABLE> a CROSS APPLY 
    (
     SELECT TOP 1 Price2 
      FROM <YOUR-TABLE> b 
     WHERE a.Date > b.Date 
      AND Price2 <> 'NA' 
      ORDER BY b.Date DESC 
    ) b 
+0

然后重复整个表格,每次更改一行时。 Blecch。 – 2012-07-18 14:17:33

+0

@Aaron Bertrand:我怎么样?我是初学者,请耐心等待。 – Zanam 2012-07-18 14:24:59

+1

你会使用一个触发器,但我决不暗示这一点。当您查询数据而不是*存储*时,填充这些列是不够的?您可以在查询或表示层上执行此操作,而无需运行更新或维护此依赖于其他行的数据。 – 2012-07-18 14:27:25