这与我最近问过的一个问题有关: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
看起来像这样
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
答案 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
)
也许它有一些错误,但你可以得到这个想法: - )