在快照表中比较两个日期-TSQL

问题描述:

我有一个快照表,其中包含特定产品及其价格的每日级别信息。 我想要实现的是将本产品的状态从当前状态与2个月前的状态进行比较。在快照表中比较两个日期-TSQL

这里是DDL

CREATE TABLE Prod_snapshot 
    ('Base_Date' datetime, 'Product_code' varchar(4)); 

INSERT INTO Prod_snapshot 
    ('Base_Date', 'Product_code') 
VALUES 
    ('2013-10-01 13:00:00', 'VD1'), 
    ('2013-10-01 13:00:00', 'VD2'), 
    ('2013-10-01 13:00:00', 'VD2'), 
    ('2013-10-01 13:00:00', 'VD1'), 
    ('2013-10-01 13:00:00', 'VD3'), 
    ('2013-10-01 13:00:00', 'VD9'), 
    ('2014-02-01 13:00:00', 'VD1'), 
    ('2014-02-01 13:00:00', 'VD2'), 
    ('2014-02-01 13:00:00', 'VD10'); 

这里是sql fiddle

这是我所希望输出

Base_date Product_Code Active_on_01_oct_2013 
01/02/2014 VD1 'Y' 
01/02/2014 VD2 'Y' 
01/02/2014 VD10 'N' 
+0

有什么你试过,没有很好地工作! –

+0

'2014-02-01' - '2013-10-01'几乎不是我能想到的任何措施的两个月。 (除非你使用罗马日历?) –

查询的基础知识会是这样的:

DECLARE @DateOfInterest date 
SET @DateOfInterest = '20140201' 

SELECT p1.Base_Date,pr.Product_Code, 
    CASE WHEN p2.Product_Code IS NULL THEN 'N' ELSE 'Y' END as PreviouslyActive 
FROM 
    Prod_snapshot p1 
     left join 
    Prod_snapshot p2 
     on 
      p1.Product_Code = p2.Product_Code and 
      p2.Base_Date = DATEADD(month,-4 /* narrative says 2 */,@DateOfInterest) 
WHERE 
    p1.Base_Date = @DateOfInterest