我正在加入2个表客户&轮廓。这两个表都由特定列cust_id连接。在个人资料表中,我有超过1个条目。我想在连接两个表时通过start_ts(列)选择最近的条目。因此,我想要一行 - 来自客户的行和结果集中来自配置文件的最新行。有没有办法做这个ORACLE SQL?
答案 0 :(得分:3)
我会使用窗口函数:
select . . .
from customer c join
(select p.*,
row_number() over (partition by cust_id order by start_ts desc) as seqnum
from profile
) p
on c.cust_id = p.cust_id and p.seqnum = 1;
如果您希望获得不具备个人资料的客户,则可以使用left join
。
答案 1 :(得分:2)
一种方法(适用于所有数据库引擎)是加入要从中选择数据的表,然后根据profile
的特定最大记录加入以过滤数据
select c.*, p.*
from customer c
join profile p on c.cust_id = p.cust_id
join
(
select cust_id, max(start_ts) as maxts
from profile
group by cust_id
) p2 on p.cust_id = p2.cust_id and p.start_ts = p2.maxts
答案 2 :(得分:1)
这是另一种方式(如果没有更新的条目,那么它是最新的):
select
c.*,
p.*
from
customer c inner join
profile p on p.cust_id = c.cust_id and not exists(
select *
from profile
where cust_id = c.cust_id and start_ts > p.start_ts
)