【问题标题】:Compare two dates in a snapshot Table -TSQL比较快照表中的两个日期 -TSQL
【发布时间】:2014-03-02 22:52:28
【问题描述】:

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

这里是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'

【问题讨论】:

  • 你有没有试过但效果不好的地方!
  • 2014-02-01 - 2013-10-01 以我能想到的任何衡量标准都不是两个月。 (除非您使用的是罗马日历?)

标签: sql sql-server tsql


【解决方案1】:

查询的基本内容如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2023-03-29
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多