Вы можете достичь этого, используя аналитическую функцию:.
with sample_data as (select 2017937950 Numbers, to_date('10/31/2010', 'mm/dd/yyyy') Effdate, to_date('04/08/2015 23:59:59', 'mm/dd/yyyy hh24:mi:ss') End_date from dual union all
select 2017937950 Numbers, to_date('10/31/2010', 'mm/dd/yyyy') Effdate, to_date('04/08/2015 23:59:59', 'mm/dd/yyyy hh24:mi:ss') End_date from dual union all
select 4054631308 Numbers, to_date('05/09/2008', 'mm/dd/yyyy') Effdate, to_date('12/31/2099 00:00:00', 'mm/dd/yyyy hh24:mi:ss') End_date from dual union all
select 4054631308 Numbers, to_date('05/09/2008', 'mm/dd/yyyy') Effdate, to_date('07/14/2009 23:59:59', 'mm/dd/yyyy hh24:mi:ss') End_date from dual union all
select 7062329778 Numbers, to_date('10/28/2009', 'mm/dd/yyyy') Effdate, to_date('12/31/2099 00:00:00', 'mm/dd/yyyy hh24:mi:ss') End_date from dual union all
select 7062329778 Numbers, to_date('10/28/2009', 'mm/dd/yyyy') Effdate, to_date('11/10/2009 23:59:59', 'mm/dd/yyyy hh24:mi:ss') End_date from dual)
select numbers,
effdate,
end_date
from (select numbers,
effdate,
end_date,
max(end_date) over (partition by numbers) max_end_date
from sample_data)
where max_end_date = to_date('12/31/2099', 'mm/dd/yyyy');
NUMBERS EFFDATE END_DATE
---------- --------------------- ---------------------
4054631308 05/09/2008 00:00:00 12/31/2099 00:00:00
4054631308 05/09/2008 00:00:00 07/14/2009 23:59:59
7062329778 10/28/2009 00:00:00 12/31/2099 00:00:00
7062329778 10/28/2009 00:00:00 11/10/2009 23:59:59
Пытались ли вы что-нибудь? Похож на 'where number in' или' where exists' будет делать трюк или «INNER join в подзапросе», который возвращает числа тех, у кого есть дата окончания, присоединяется к числу. Я бы подумал, что существует, возможно, лучшая производительность, но depe nds по индексам и volumn данных – xQbert
Я пробовал, и он дает мне только одно число, связанное с 12/31/2099, а не другое число, хотя –
'SELECT ... FROM ... WHERE end_date = yourdatehere' –