2013-12-17 67 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