Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Выборка из 2х таблиц с интервалом дат  [new]
irqrib
Member

Откуда:
Сообщений: 5
Добрый день,

хочу обратиться к общественности с просьбой помочь сформировать запрос.

итак, дано:
1-ая таблица
with t1 as
(
select 2 as amount, to_date('11.02.2014 09:00:00','dd.mm.yyyy hh24:mi:ss') as dt from dual union all
select 3 as amount, to_date('11.02.2014 10:12:00','dd.mm.yyyy hh24:mi:ss') as dt from dual union all

select 4 as amount, to_date('11.02.2014 12:00:00','dd.mm.yyyy hh24:mi:ss') as dt from dual union all
select 6 as amount, to_date('11.02.2014 13:13:00','dd.mm.yyyy hh24:mi:ss') as dt from dual union all

select 8 as amount, to_date('11.02.2014 16:00:00','dd.mm.yyyy hh24:mi:ss') as dt from dual union all
select 9 as amount, to_date('11.02.2014 17:14:00','dd.mm.yyyy hh24:mi:ss') as dt from dual
)

в ней хранятся транзакции с данными о сумме и о времени совершения операции

2-ая таблица
with t2 as
(
select 1 as rate, to_date('11.02.2014 08:00:00','dd.mm.yyyy hh24:mi:ss') as dt from dual union all
select 2 as rate, to_date('11.02.2014 11:00:00','dd.mm.yyyy hh24:mi:ss') as dt from dual union all
select 3 as rate, to_date('11.02.2014 14:00:00','dd.mm.yyyy hh24:mi:ss') as dt from dual
)

хранит информацию о курсах и дате выставления курсов

необходимо:
составить выборку которая состояла бы из полей таблицы T1 и датой выставления курса из таблицы T2
30 апр 14, 13:40    [15958282]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
123йй
Member

Откуда:
Сообщений: 1637
irqrib,

t1.dt between lag/lead(t2)
30 апр 14, 13:44    [15958332]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
Азагаш
Member

Откуда:
Сообщений: 450
123йй
t1.dt between lag/lead(t2)

особо и добавить нечего. разве что скорее не "between", а ">= and <"
30 апр 14, 13:57    [15958484]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
Злой Ветеринар
Guest
123йй,

Не, between не подойдет. Ибо будут дубликаты. Лучше T2.start_rate_period <= T1.dt and T2.dt < T2.end_rate_period, где в T2 интервалы получены аналитикой ( T2.start_period=T2.dt и T2.end_period = nvl( LEAD(T2.dt) over(partition by T2.rate order by T2.dt), to_date('31.12.9999','dd.mm.yyyy') )
30 апр 14, 14:04    [15958546]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
Злой Ветеринар
Guest
Очепятка. Конечно же:

T2.start_rate_period <= T1.dt and T1.dt < T2.end_rate_period
30 апр 14, 14:06    [15958562]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
irqrib
Member

Откуда:
Сообщений: 5
благодарю, очень выручили

select 
       t1.*
       ,t3.start_period
       ,t3.end_period
from t1,
(
     select           
       t2.dt as start_period,
       lag(t2.dt,1,trunc(t2.dt)+1) over(order by t2.dt desc) as end_period
     from t2
) t3
where t1.dt <= t3.end_period and t1.dt > t3.start_period
30 апр 14, 14:22    [15958670]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
123йй
Member

Откуда:
Сообщений: 1637
Злой Ветеринар
Очепятка. Конечно же:
T2.start_rate_period <= T1.dt and T1.dt < T2.end_rate_period

да там она не одна
nvl( LEAD - смотреть доку по парамертам ф-ции
over(partition by T2.rate order by T2.dt)
30 апр 14, 14:31    [15958735]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
Азагаш
Member

Откуда:
Сообщений: 450
шикарный топик, приятно оформленное задание, быстрая подсказка, приведено решение. прям эталон.
30 апр 14, 15:36    [15959321]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из 2х таблиц с интервалом дат  [new]
123йй
Member

Откуда:
Сообщений: 1637
Азагаш,

вот
30 апр 14, 15:38    [15959336]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить