SQL为给定创建时间和修改时间的特定日期选择记录

时间:2011-12-18 22:51:37

标签: sql tsql

CONTEXT

我的管理层已经要求我“分析”我们的问题跟踪数据库 - 他们用它来编目我们的内部错误等等。我的SQL和DB技能原始所以我需要一些帮助

THE DATA

我收到了一张包含300万条记录的表格。它占了250K的bug。错误的每个版本都是表格中的一行。这就是250万个错误在300万条记录中的结果。

数据看起来像这样

BugID  Created      Modified     AssignedTo  Priority  Status
27     mar-31-2003  mar-31-2003  mel         2         Open
27     mar-31-2003  apr-01-2003  mel         1         Open
27     mar-31-2003  apr-10-2003  steve       1         Fixed

因此,我掌握了每个bug的完整历史,并且可以看到它们每天如何进化。

我想要实现的目标

我有很多事情要求我提供报告。但是,我被要求做的最基本的问题是让某人能够查看特定日期存在的错误。

例如,如果有人在2003年3月1日要求提供所有错误,则错误27不在结果中,因为它在当天不存在。或者如果他们在4月7日询问错误,他们会看到错误27并且仍然标记为开放

我的具体问题

根据我概述的架构,哪个SQL查询将提供特定日期记录的视图?

技术细节

我正在使用Microsoft SQL Server 2008

我从未尝试过什么

正如我所说,我的SQL技能是原始的。我能够使用WHERE子句来过滤目标日期之后所做的修改以及目标日期之前不存在的错误,但是无法找到该日期发生的单个记录。

1 个答案:

答案 0 :(得分:4)

WITH
  sequenced_data AS
(
  SELECT
    ROW_NUMBER() OVER (PARTITION BY BugID ORDER BY Modified DESC) AS sequence_id,
    *
  FROM
    yourTable
  WHERE
    Modified <= @datetime_stamp
)
SELECT
  *
FROM
  sequenced_data
WHERE
  sequence_id = 1

这假设你想看到修复的错误。如果你想过滤掉“很久以前”修复的错误(比如说30天),请添加这个...

AND (Status <> 'Fixed' OR Modified >= DATEADD(DAY, -30, @datetime_stamp))