Sql 联接两个表并仅从第二个表中获取最新的条目

Sql 联接两个表并仅从第二个表中获取最新的条目,sql,firebird,Sql,Firebird,我需要做这个firebird查询,请帮忙 我有两张桌子: 表1:客户 ID, NAME, TEL, ADRESS, EMAIL 表2:CRM\U互动 ID, CLIENT_ID, DATE, INTERACTION_TYPE 我需要检索客户机表的所有字段加上表2中的两列:该客户机的上次交互类型加上日期,因此视图如下所示: ID, NAME, TEL, ADRESS, EMAIL, DATE_OF_LAST_INTERACTION, INTERACTION_TYPE 1, JOHN, 555

我需要做这个firebird查询,请帮忙

我有两张桌子:

表1:客户

ID, NAME, TEL, ADRESS, EMAIL
表2:CRM\U互动

ID, CLIENT_ID, DATE, INTERACTION_TYPE
我需要检索客户机表的所有字段加上表2中的两列:该客户机的上次交互类型加上日期,因此视图如下所示:

ID, NAME, TEL, ADRESS, EMAIL, DATE_OF_LAST_INTERACTION, INTERACTION_TYPE

1, JOHN, 555555,1TH ST, John@gmail.com, 01/10/2016, phone call

我认为firebird 3+具有
行号()
,因此您可以:

select c.*, ci.*
from client c left join
     (select ci.*,
             row_number() over (partition by client_id order by date desc) as seqnum
      from crm_interactions ci
     ) ci
     on c.id = ci.client_id and seqnum = 1;
在早期版本中,您可以使用传统的SQL来实现这一点。这里有一个方法:

select c.*, ci.*
from client c left join
     crm_interactions ci
     on c.id = ci.client_id left join
     (select ci.client_id, max(date) as maxdate
      from crm_interactions ci
      group by ci.client_id
     ) cci
     on ci.client_id = cci.client_id and ci.date = cci.maxdate;

我对它进行了测试,它几乎解决了问题,只有一个问题:保持这种方式,它只会向客户机显示交互,但不是每个客户机都有ci表中的值。我还使用左连接替换了两个连接,但它复制了客户端记录。有什么想法吗?