我有这张桌子:
prba_id | ba_id | start_date | end_date
1 | 1 | 2020-01-01 | 2020-02-25
2 | 1 | 2020-02-25 | null
3 | 2 | 2020-03-01 | 2020-04-25
4 | 2 | 2020-04-25 | 2020-05-25
如果end_date为null,则我搜索以获取最近end_date的ba_id的记录,这直接意味着它是最新的。
该查询似乎有效:
select max(coalesce(end_date, to_date('9999-01-01', 'YYYY-MM-DD'))) from prba
where praba.billing_account_id = 2
..但我需要所有领域。
我想要一个JPA
解决方案,但如果不可能,可以使用native。
您可以使用row_number()
:
select prba.*
from (select prba.*,
row_number() over (partition by billing_account_id order by end_date desc nulls first) as seqnum
from t
) t
where seqnum = 1;
这提供了所有计费帐户的信息。
如果只需要一个,则可以在子查询中进行过滤-或使用:
select prba.*
from prba
where billing_account_id = 2
order by end_date desc nulls first
fetch first 1 row only;
在旧版本的Oracle中:
select p.*
from (select prba.*
from prba
where billing_account_id = 2
order by end_date desc nulls first
) p
where rownum = 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句