我的管理层已经要求我“分析”我们的问题跟踪数据库 - 他们用它来编目我们的内部错误等等。我的SQL和DB技能原始所以我需要一些帮助
我收到了一张包含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子句来过滤目标日期之后所做的修改以及目标日期之前不存在的错误,但是无法找到该日期发生的单个记录。
答案 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))