我想運行一個簡單的更新語句,它從一個表中獲取數據並插入到另一個表中。問題是數據所在的表可能有一個或多個記錄,所以我想使用包含數據的最新記錄。從另一個表更新一個表與最新記錄的最有效方法
這是我的代碼,並且介意你這段代碼最初工作得很好。我擔心的是,如果我遇到有多條記錄的情況,我想更新最新記錄的數據。與數據表確實有DateTimeEntered場利用:
Update C
Set C.CaseNumber = L.Docket_NO
From dbo.Cases as C
Inner Join dbo.messages as L
on L.AccountID = C.AccountID
where (L.Docket_NO <> '' and L.Docket_NO != C.CaseNumber)
or (L.Docket_NO <> '' and C.CaseNumber is Null)
所以,如果我嘗試CTE的方法,我會做這樣的事情:
With CTE_Messages as (Select AccountID, DOCKET_NO, DateTimeEntered from dbo.messages where DateTimeEntered = (Select MAX(DateTimeEntered) from dbo.messages))
Update C
Set C.CaseNumber = L.Docket_NO
From dbo.Cases as C
Inner Join CTE_Messages as L
on L.AccountID = C.AccountID
where (L.Docket_NO <> '' and L.Docket_NO != C.CaseNumber)
or (L.Docket_NO <> '' and C.CaseNumber is Null)
我需要插入其中,和/或條款加入CTE以獲取相關數據?我是不是在想這個CTE是不需要的,我只需要在Set上找到一個子查詢並在那裏查找最大日期時間?
我真的只是尋找最有效的方法來完成這一點。任何人都可以幫助這個SQL新手?任何洞察力將是最讚賞。
編輯:謝謝你的答案。但這是我的主要問題。
我最初使用是這樣的:
Update C
Set C.CaseNumber = L.Docket_NO
From dbo.CourtCases as C
Inner Join dbo.messages as L
on L.AccountID = C.AccountID
where (L.Docket_NO <> '' and L.Docket_NO != C.CaseNumber)
or (L.Docket_NO <> '' and C.CaseNumber is Null)
這個簡單的更新語句的工作,直到我意識到,我不知道什麼記錄SQL從dbo.messages拉動更新CourtCases.CaseNumber。 Dbo.Messages是一個歷史表,可能有多個記錄。其中一些記錄會有所不同或老舊,需要更新。我最初鎖定到來自dbo.messages的Datetimeentered以給我最近的項目,但問題是並非dbo.messages中的每個記錄都包含要使用的Docket_NO。