2016-09-24 2 views
1

을 찾고 나는 테이블 @tblChildDataMAX ChildDateTimeIsLast 내가 쿼리 아래로 업데이트 할 수 있어요 = 1더 나은 SQL 쿼리

Declare @tblData Table(DId Int, TypeId Int, LastDateTime DateTime) 
Insert Into @tblData Values(1, 1, Null), (2, 2, Null), (3, 2, Null) 

Declare @tblChildData Table(CId Int, DId Int, ChildDateTime DateTime, IsLast Bit) 
Insert Into @tblChildData Values (10, 1, '2016-09-20 07:47:03.000', Null) 
    , (11, 2, '2016-09-20 08:47:03.000', Null) 
    , (12, 2, '2016-09-20 09:32:03.000', 1) 
    , (13, 2, '2016-09-20 10:47:03.000', Null) 
    , (14, 2, '2016-09-20 11:32:03.000', 1) 
    , (15, 1, '2016-09-20 06:47:03.000', Null) 

@tblData 테이블의 LastDateTime 열을 업데이트 할 필요가 있지만, 더 나은 쿼리를 찾고. 감사!!!

UPDATE UQ 
SET UQ.LastDateTime = (
    SELECT MAX(D.ChildDateTime) 
    FROM @tblData C 
    JOIN @tblChildData D ON C.DId = D.DId 
     AND C.TypeId = 2 
     AND D.IsLast = 1 
) 
FROM @tblData UQ 
JOIN @tblChildData PD ON UQ.DId = PD.DId 
    AND UQ.TypeId = 2 
    AND PD.IsLast = 1 

SELECT * FROM @tblData 
+0

감사를 시도 할 수 있습니다 쿼리의 실행 계획 비교입니다 더 나은 편집 – user584018

답변

0

당신은 다음과 같이 갱신을 시도 할 수 있습니다 :

UPDATE t 
SET t.lastDateTime = (SELECT 
    MAX(childDatetime) 
FROM @tblChildData 
WHERE did = t.did 
AND IsLast = 1) 
FROM @tblData t 

다시 아래 childdata와 결합 왜 확실하지. 예상 출력으로 출력을 확인하십시오. 분명히 두 번째 다른 테이블에 참여하지 않기 때문에 더 잘 수행됩니다. 다음은

내 업데이트 스크립트

enter image description here

귀하의 업데이트 스크립트가

enter image description here

+0

많이 고마워요 !!!! – user584018

0

당신은이 일

UPDATE UQ SET UQ.LastDateTime = (
SELECT MAX(D.ChildDateTime) 
FROM @tblChildData D where D.DId=UQ.DId 
    AND UQ.TypeId = 2 
    AND D.IsLast = 1) FROM @tblData UQ where UQ.TypeId = 2 
+0

많이 고마워요 !!!! – user584018