두 개의 테이블이 있습니다.
Part (Table)
----
PartID
SerialNumber
CreationDate
Test (Table)
----
PartID
TestName
TestDateTime
TestResult
테이블에는에서 일대 다 관계가 PartID
있으며 한 부분에는 많은 Test
항목 이있을 수 있습니다 .
내가하려는 것은 해당 부품에 대해 수행 된 마지막 테스트의 정보 만 포함 된 부품 목록을 반환하는 것입니다.
Part Test
PartID SerialNumber CreationDate PartID TestName TestDateTime TestResult
-------------------------------- -------------------------------------------
1 555 12/9/2013 1 Test 1 1/1/2014 Pass
1 Test 2 2/2/2014 Fail
부품 정보와 함께 마지막 테스트 데이터를 반환하고 싶습니다.
PartID SerialNumber CreationDate TestName TestDateTime TestResult
-----------------------------------------------------------------
1 555 12/9/2013 Test 2 2/2/2014 Fail
현재 TestDateTime
부품의 마지막 테스트를 가져올 수 있지만이 쿼리에는 다른 정보가 없습니다 (하위 쿼리는 더 많은 항목을 반환 할 수 없음).
SELECT PartID, SerialNumber, CreationDate,
(SELECT TOP (1) TestDateTime
FROM Test
WHERE (PartID = Part.PartID)
ORDER BY TestDateTime DESC) AS LastDateTime
FROM Part
ORDER BY SerialNumber
원하는 데이터를 얻기 위해 취할 수있는 다른 접근 방식이 있습니까?
한 번만 테스트 테이블에 도달하는 또 다른 방법이 있습니다.
with SortedData as
(
SELECT PartID
, SerialNumber
, CreationDate
, TestDateTime
, ROW_NUMBER() over (Partition by PartID ORDER BY TestDateTime DESC) AS RowNum
FROM Part p
join Test t on t.PartID = p.PartID
)
select PartID
, SerialNumber
, CreationDate
, TestDateTime
from SortedData
where RowNum = 1
ORDER BY SerialNumber
2012 년 이후 인 경우 FIRST_VALUE도 사용할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다