0

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

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

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

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

4

1 回答 1

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
于 2012-06-16T00:53:35.223 回答