2013-12-17 85 views
0

我在我的SQL數據庫兩個表:SQL SELECT插入從表2到表1

列在表1:

entity ID, contact person, contact ID, created date 

列於表2:

contact ID entity ID modified date contact person 
1    2   10/12/13   MR.A 
1    2   11/12/13   MR.B 
4    16   17/12/13   MR.C 
4    16   19/12/13   MR.D 

我想從表2中插入記錄表1,其中修改的日期是最大的相同contact ID

輸出應該是這樣的:

表1

entity ID contact person contact ID created date 
2   MR.B    1   11/12/13 
16   MR.D    4   19/12/13 

請建議如何寫這樣的SQL查詢。我用max和一些查詢,但沒有得到我的答案,猜猜這是不正確的位置?

在此先感謝

+0

是否可能同一實體ID和聯繫人ID有兩個不同的聯繫人? –

+0

是有可能,主鍵是別的東西在裏面 –

回答

2

看起來您在表2上沒有主鍵。如果你這樣做,那麼這會更容易,因爲你可以在連接中使用它。然而,由於你不那麼這個SQL做的伎倆:

INSERT INTO Table1("entity ID", "contact person", "Contact ID", "created date") 
SELECT b."entity ID", b."contact person", b."contact ID", b."created date" 
FROM 
(
    SELECT "Contact ID", "entity ID" , MAX("created date") "created date"     
    FROM Table2 
    GROUP BY "Contact ID", "entity ID" 
) a 
JOIN Table2 b ON b."Contact ID" = a."Contact ID" AND 
       b."entity ID" = a."entity ID" AND 
       b."created date" = a."created date" 

的Sql小提琴可以found here

+0

我正要張貼非常多,但要張貼欺騙前閱讀前兩份意見書。然後你擊敗我: - | – xmjx

0

那麼你需要李爾吧,下一次試圖得到一個解決方案。

INSERT INTO table_1 (entity_ID, contact_person, contact_ID, created_date) 
SELECT entity_ID, contact_person, contact_ID, Max(created date) 
FROM table_2 
Group by entity_ID, contact_person, contact_ID 
0

插入到從表2 T2 GROUPBY T2表1的值(選擇t2.entityid,t2.contactperson,t2.contactid,(從表2 T22選擇最大值(t2.createddate)其中t22.entityid = t2.entityid) .entityid,t2.contactperson,t2.contactid)

+0

請 - 發佈代碼時 - ** **格式可以使用文本編輯器'{}'按鈕,使正確的顯示和語法高亮的代碼! –

+0

@marc_s ok,tnx – fasadat

0

使用下面的選擇查詢來獲取數據,然後將數據:

select 
    t1.contact_id, t1.ENTITY_ID, t1.MODIFIED_DATE, t1.CONTACT_PERSON 
from 
    test_table t1, 
    (select 
     contact_id, max(modified_date) as max_modified_date 
    from 
      test_table 
    group by 
      contact_id) t2 
where 
    t1.contact_id = t2.contact_id and t1.MODIFIED_DATE = t2.max_modified_date; 
0

試試這個:

INSERT INTO Table1 (EntityID,ContactPerson,ContactID,CreatedDate) 
SELECT 
EntityID,ContactPerson,ContactID,ModifiedDate 
FROM 
(
Select Row_NUMBER() Over(Partition By ContactId order by ModifiedDate DESC) ROW_NO, 
EntityID,ContactPerson,ContactID,ModifiedDate 
from Table2 
) AS T WHERE T.ROW_NO = 1