А что-то вроде этого:
select 'BEFORE' term,
t."Semestertime", to_char(t."joiningDate", 'MM-DD-YYYY')
from (
select tbl.*, rownum rn from tbl where tbl."joiningDate" < to_date('1-1-2012','MM-DD-YYYY')
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- your reference date
order by tbl."joiningDate" desc) t
where rn = 1
union all
select 'AFTER' term,
t."Semestertime", to_char(t."joiningDate", 'MM-DD-YYYY')
from (
select tbl.*, rownum rn from tbl where tbl."joiningDate" > to_date('1-1-2012','MM-DD-YYYY')
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- your reference date
order by tbl."joiningDate" asc) t
where rn = 1
Это вернет "термин" до и после указанной даты. Вероятно, вам придется адаптировать такой запрос к вашим конкретным потребностям. Но это может быть хорошей отправной точкой.
Например, с учетом ваших деловых правил вы можете использовать <=
вместо <
. Вам может потребоваться отобразить в качестве результата столбец вместо строк. Все это не должно меняться.
В качестве альтернативного решения с использованием КТОС и подзапросов:
with testdata as (select to_date('1-1-2012','MM-DD-YYYY') refdate from dual)
select v.what, tbl.* from tbl join
(
select 'BEFORE' what, max(t1."joiningDate") d
from tbl t1
where t1."joiningDate" < to_date('1-1-2012','MM-DD-YYYY')
union all
select 'AFTER' what, min(t1."joiningDate") d
from tbl t1
where t1."joiningDate" > to_date('1-1-2012','MM-DD-YYYY')
) v
on tbl."joiningDate" = v.d
http://sqlfiddle.com/#!4/c7fa5/15 Смотрите для живой демонстрации, сравнивая эти решения.
Учитывая '1-1-2012', это вернет' осень 2011'? А что, если дано «1-1-2015»? –
Я хочу запрос, как я могу найти дату, что когда-либо даю диапазон –
У меня есть динамическая дата присоединения –