次の表があります-かなり単純化されています
Table - Tests
Test
A
B
C
D
E
F
G
H
Table - TestHistory
Test Result Version
A Pass 1
A Fail 2
B Pass 2
C Fail 1
C Pass 2
D Fail 1
D Fail 2
E Fail 1
最後に実行したときに失敗したテスト (または任意のステータス) のリストを取得したいと考えています。しかし、それが見つかったバージョンでもあります。
したがって、上記の例では、これが返されるようにします。
A Fail 2
D Fail 2
E Fail 1
私はいくつかの方法を試しました
select Test, LastResult = IsNull((Select Top 1 Result From TestHistory Where Test = Tests.Test order by Version desc), 'NOT_RUN')
from Tests
これにより、すべてのテストのリストが表示され、必要のない行 (つまり、Fail ではない行) を除外する必要があります。これは、それが実行されたバージョンも教えてくれません。
私もこれを試しました:
select Version, TH.Test, Result
from TestHistory as TH inner join Tests as T on TH.Test = T.Test
where Result = 'Fail'
しかし、次のような行が得られます。
Test Result Version
C Fail 1
Last Resultではないため、それらは必要ありません。
これを制限して、後で多くのデータ操作 (またはさらに悪いことに、より多くの DB 読み取り) を行うことなく、必要なものを正確に提供するにはどうすればよいですか? どんな助けでも大歓迎です。ありがとう!