查询以获取最近一天通过的测试次数

时间:2012-06-16 00:12:00

标签: sql sql-server-2008

我正在研究测试工具,并为其进行报告。 因此,有一项测试可以每天自动进行几次。在一份报告中,我需要显示每次测试的历史数据(包含测试日期和测试次数的图表)以及最近一天通过的测试次数。 不要创建这个问题的模型:

我有这样的数据结构(简化):

DECLARE @TestResults TABLE
(
    TestId INT,
    DateOfResult DATE,
    TestPassedCount INT
);

INSERT INTO @TestResults VALUES (1,DATEADD(day,-3,GETDATE()), 6);--This test passed 4 times  3 days ago
INSERT INTO @TestResults VALUES (1,DATEADD(day,-1,GETDATE()), 4); --This test passed 4 times yesterday
INSERT INTO @TestResults VALUES (1,GETDATE(), 5); --This test passed five times today

INSERT INTO @TestResults VALUES (2,DATEADD(day,-3,GETDATE()), 6);--This test passed 4 times  3 days ago
INSERT INTO @TestResults VALUES (2,DATEADD(day,-1,GETDATE()), 4); --This test passed 4 times yesterday

SELECT * FROM @TestResults;

上次选择会返回一个数据集:

TestId   DateOfResult   TestPassedCount
1   2012-06-12             6
1   2012-06-14             4
1   2012-06-15             5
2   2012-06-12             6
2   2012-06-14             4

我如何才能获得此查询(在单独的列中)最大可用日期的通过测试数量?例如,对于ID为1的测试,我有6月12,13,14的数据。所以,在单独的列中我需要得到5,因为在最近的日期(max(DateOfResults))有五个通过的测试?

我正在使用SQL Server 2012。

谢谢!

更新:我蠢蠢欲动:

SELECT SubQ.*, r.TestPassedCount  FROM (
    SELECT *, Max(t.DateOfResult) OVER (PARTITION BY t.TestId ORDER BY t.TestId) as MaxDate FROM @TestResults t 
) AS SubQ JOIN @TestResults r ON r.TestId = SubQ.TestId AND r.DateOfResult = SubQ.MaxDate

现在我需要将它应用于真正的查询:) 还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

我无法执行你的解决方案,也许是遗漏了什么?我有这个错误(我无法理解为什么):

Msg 102, Level 15, State 1, Line 16
Incorrect syntax near 'order'.

所以,我的查询版本几乎相同:

SELECT t2.TestId, t2.DateOfResult ,t2.TestPassedCount FROM @TestResults t2
INNER JOIN (
            SELECT t.TestId, MAX(t.DateOfResult) AS MaxDateOfResult from @TestResults t
            GROUP BY t.TestId ) groupedTests ON groupedTests.TestId = t2.TestId AND groupedTests.MaxDateOfResult = t2.DateOfResult
ORDER BY t2.TestId