0

私はテストツールに取り組んでおり、それについて報告しています。SO、1日に数回自動的に実行できるテストがあります。また、あるレポートでは、テストごとの履歴データ (日付と合格したテストの数を含むグラフ) と、最新の日に合格したテストの数を表示する必要があります。この問題のモデルを作成しないでください:

私はそのようなデータ構造を持っています(簡略化):

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

次に、それを実際のクエリに適用する必要があります:)他に行う方法はありますか?

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 に答える