在快照表中比较两个日期-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'
答
查询的基础知识会是这样的:
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
有什么你试过,没有很好地工作! –
'2014-02-01' - '2013-10-01'几乎不是我能想到的任何措施的两个月。 (除非你使用罗马日历?) –