2017-01-17 39 views
-3

我從那裏我需要更新我的當前表,但借命令基於列一個歷史悠久的表更新表,但通過第一場比賽,然後通過第二

首先看看在歷史悠久的桌子和更新,並且最後日期只有在沒有匹配的更新從下一個最後的日期等等。

我的想法是通過獲取最大日投入循環,然後加入遞歸直到分鐘日期在歷史悠久的表。

任何輸入將不勝感激。

歷史見下表。現在考慮更新我的表,它有S_Numb 18992所以沒有匹配,但如果它的1891它應該更新ABC1。表中沒有日期字段需要更新。

S_Numb S_Name S_date 
19891 ABC1 2017-01-13 
19891 ABC2 2017-01-06 
19891 ABC3 2016-12-30 
11631 ABC2 2016-12-16 
11631 ABC3 2016-12-09 
11631 ABC4 2016-12-02 
11631 ABC5 2016-11-25 
11631 ABC6 2016-11-18 
11631 ABC7 2016-11-11 
13213 ABC1 2016-11-04 
13213 ABC2 2016-10-28 
13213 ABC3 2016-10-21 
13213 ABC4 2016-10-14 
13213 ABC5 2016-10-07 
13213 ABC6 2016-09-30 
13213 ABC7 2016-09-16 
+4

你嘗試過什麼?用一些示例數據顯示你的表格結構。 – dfundako

+0

我已經添加了一個表 –

回答

0

你可以使用cross apply來獲取最新的值是這樣的:

交叉apply

--update c set c.ColumnToUpdate = x.ColumnToUpdate 
select x.ColumnToUpdate, c.* 
    from Current as c 
    cross apply (
     select top 1 
      h.ColumnToUpdate 
     from History 
     where h.Id = c.Id 
     order by h.Date desc 
      ) as x 
    where c.ColumnToUpdate != x.ColumnToUpdate; 

與問題更新一些代碼註釋更新時間:

update c set c.S_Name = x.S_Name 
--select x.S_Name, c.* 
    from Current as c 
    cross apply ( /* only returns rows where there is a result */ 
     select top 1 -- only first result 
      h.S_Name -- column to update 
     from History 
     where h.S_Numb = c.S_Numb -- column to match on 
     order by h.Date desc -- most recent date first 
      ) as x 
    where c.S_Name != x.S_Name; 
+0

真棒,這工作。理解邏輯需要時間。 –

0

我們找到了D使用一些樣本數據,但假設這兩個表中的每一行有一個名爲SomeID的ID,而歷史悠久的表有一個名爲YourCreatedTimeStamp時間戳,並且你會在一個名爲SomeField場喜歡更新值...

update CurrentTable 
    set SomeField = 
     (
     select SomeField 
     from HistoricTable 
      inner join 
       (
       select 
         SomeId 
        ,max(YourCreatedTimeStamp) as LastCreatedTS 
       from HistoricTable 
       group by SomeId 
       ) LastEntryForEachId 
      on HistoricTable.SomeId = LastEntryForEachId.SomeId 
       and HistoricTable.YourCreatedTs = LastEntryForEachId.LastCreatedTs) 
where SomeId = [The Id You Are Interested in Updating) 
+0

我更新了一個示例表。當前表格沒有時間戳記 –

+0

創建的時間戳記僅在歷史表格中是必需的。 –

+0

是的,它的歷史記錄基於我需要做的匹配,但我想拉最新的。 @SqlZim提供的解決方案爲我工作。 –