replace NULL values with latest non-NULL value in resultset series (SQL Server 2008 R2)

前端 未结 3 705
执笔经年
执笔经年 2020-12-10 06:55

for SQL Server 2008 R2

I have a resultset that looks like this (note [price] is numeric, NULL below represents a NULL value, the result set is ordered by product_i

3条回答
  •  情歌与酒
    2020-12-10 07:58

    You can try the following:

    * Updated **

    -- Test Data
    DECLARE @YourTable TABLE(Product INT, Timestamp DATETIME, Price NUMERIC(16,4))
    
    INSERT INTO @YourTable
    SELECT 5678, '20080101 12:00:00', 12.34
    UNION ALL
    SELECT 5678, '20080101 12:01:00', NULL
    UNION ALL
    SELECT 5678, '20080101 12:02:00', NULL
    UNION ALL
    SELECT 5678, '20080101 12:03:00', 23.45
    UNION ALL
    SELECT 5678, '20080101 12:04:00', NULL
    
    ;WITH CTE AS
    (
        SELECT *
        FROM @YourTable
    )
    
    -- Query
    SELECT A.Product, A.Timestamp, ISNULL(A.Price,B.Price) Price
    FROM CTE A
    OUTER APPLY (   SELECT TOP 1 *
                    FROM CTE 
                    WHERE Product = A.Product AND Timestamp < A.Timestamp
                    AND Price IS NOT NULL
                    ORDER BY Product, Timestamp DESC) B
    
    --Results
    Product Timestamp   Price
    5678    2008-01-01 12:00:00.000 12.3400
    5678    2008-01-01 12:01:00.000 12.3400
    5678    2008-01-01 12:02:00.000 12.3400
    5678    2008-01-01 12:03:00.000 23.4500
    5678    2008-01-01 12:04:00.000 23.4500
    

提交回复
热议问题