私はテストツールに取り組んでおり、それについて報告しています。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
次に、それを実際のクエリに適用する必要があります:)他に行う方法はありますか?