Sql 联接两个表并仅从第二个表中获取最新的条目
我需要做这个firebird查询,请帮忙 我有两张桌子: 表1:客户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
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表中的值。我还使用左连接替换了两个连接,但它复制了客户端记录。有什么想法吗?