给定修改日期的SQL添加ValidUntil

时间:2011-12-19 19:25:35

标签: sql sql-server

CONTEXT

这与我最近问过的一个问题有关:SQL to select records for a specific date given created time and modified time

如果您想了解有关问题的更多背景信息,请阅读。一个快速摘要是我有一个包含问题跟踪数据的表。它存储对问题所做的每个修订。每行都是一个修订版,并且有一个名为“已修改”的列,用于指示修订版本何时处于活动状态。在回答这个问题时,有人(谢谢)提供了一个查询,使我能够查看特定日期的问题状态。

我私下收到的一条建议是通过添加一个新列来简化查询,该列存储了修订不再有效的时间。

换句话说,取一个Modified字段并计算“ValidUntil”的值

输入数据

看起来像这样

BugID  Created      Modified     Status
27     mar-31-2003  mar-31-2003  Open
27     mar-31-2003  apr-01-2003  Open
27     mar-31-2003  apr-10-2003  Fixed

所需的OUPUT数据

看起来像这样

BugID  Created      Modified     ValidUntil  Status
27     mar-31-2003  mar-31-2003  apr-01-2003  Open
27     mar-31-2003  apr-01-2003  apr-10-2003  Open
27     mar-31-2003  apr-10-2003  NULL         Fixed

我的具体问题

我可以在数据库中创建ValidUntil列。

理想情况下,我正在寻找可以插入正确的ValidUtil日期的SQL。

我从未尝试过什么

坦率地说,没什么。这远远超出了我的专业知识,我不知道该怎么做。

技术说明

我正在使用Microsoft SQL Server 2008

1 个答案:

答案 0 :(得分:0)

检查此查询:

UPDATE yourtable toUpd
   SET toUpd.ValidUntil = fromUpd.Modified
  FROM yourtable fromUpd
 WHERE fromUpd.BugId = toUpd.BugId
   and fromUpd.modfified > toUpd.Modified
   and not exists
         (SELECT 1
            FROM yourtable innerTable
           WHERE fromUpd.BudId = innerTable.BugId
             and fromUpd.Modified > innerTable.Modified
             and toUpd.Modified < innerTable.Modified
         )

也许它有一些错误,但你可以得到这个想法: - )