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

标签 sql sql-server tsql

我有一个快照表,其中包含特定产品及其价格的每日级别信息。 我想要实现的只是将该产品的当前状态与 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'

最佳答案

查询的基础知识类似于:

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

关于sql - 比较快照表中的两个日期 -TSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22134771/

相关文章:

sql-server - Msmdpump.dll OLAP 数据泵抛出 500 错误

sql-server - SSMS 对象资源管理器 - 连接到 Azure DB 时选择丢失的前 N ​​行

sql - 我们如何为 SQL 中的列提供多个别名?

SQL IN 子句保证计算结果为 false

mysql - 数据库/SQL 边缘案例

php - SQL:如何选择总计为特定值的行

sql - 'Select' 是否总是按主键排序?

带有 equals 和 in 的 SQL 语句

sql-server-2008 - 显示最近执行的存储过程,包括参数

sql - 简单的 SQL 命令没有正确结束