Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询以获取最近一天通过的测试数_Sql_Sql Server 2008 - Fatal编程技术网

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

Sql 查询以获取最近一天通过的测试数,sql,sql-server-2008,Sql,Sql Server 2008,我在测试工具上工作,为它做报告。 因此,有一种测试每天可以自动执行几次。在一个报告中,我需要显示每个测试的历史数据(带有日期和通过测试次数的图表)和最近一天通过测试的次数。 不创建此问题的模型: 我有这样的数据结构(简化): 最后一次选择将返回一个数据集: TestId DateOfResult TestPassedCount 1 2012-06-12 6 1 2012-06-14 4 1 2012-06-15

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

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

最后一次选择将返回一个数据集:

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
我如何通过这个查询(在单独的列中)获得max available date的通过测试的数量?例如,对于ID为1的测试,我有6月12、13、14日的数据。所以,在另一列中,我需要得到5,因为在最新的日期(max(DateOfResults))有5个通过的测试

我正在使用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
现在我需要将其应用于实际查询:)
还有其他方法吗?

我无法执行您的解决方案,可能您遗漏了什么?我有这个错误(我不知道为什么):

因此,我的查询版本几乎相同:

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
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