Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / На MS SQL это делается так, а вот как на Oracle / 4 сообщений из 4, страница 1 из 1
04.08.2020, 13:37
    #39986372
VladimirKr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На MS SQL это делается так, а вот как на Oracle
Приветствую.
Возникла разовая задача не по моей специализации.
На MS SQL это вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
use tempdb
;
create table rates (
    dt datetime primary key
    ,rate decimal(15,4))
    
;
create table flow (
    dt datetime primary key)
    
;
insert into rates(dt,rate)
select
    '20200701',10
union all select
    '20200703',15
union all select
    '20200705',20
;
insert into flow(dt)
select
    '20200701'
union all select
    '20200702'
union all select
    '20200703'
union all select
    '20200704'
union all select
    '20200705'
;
select
    f.dt flow_date
    ,r.dt rate_date
    ,r.rate rate_on_flow_date
from flow f
outer apply    (
    select top 1
        r.dt
        ,r.rate
    from rates r
    where
        r.dt<=f.dt
    order by
        r.dt desc) r
order by
    f.dt
;
drop table rates
;
drop table flow


результат:

rate_dateflow_daterate_on_flow_date2020-07-012020-07-0110.00002020-07-022020-07-0110.00002020-07-032020-07-0315.00002020-07-042020-07-0315.00002020-07-052020-07-0520.0000
Нужно тоже самое сделать на Oracle
Помогите плз примером или направлением поиска
...
Рейтинг: 0 / 0
04.08.2020, 13:51
    #39986377
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На MS SQL это делается так, а вот как на Oracle
VladimirKr,

так же
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
WITH rates(dt,rate) AS(
SELECT DATE '2020-07-01',10 FROM dual UNION ALL
SELECT DATE '2020-07-03',15 FROM dual UNION ALL
SELECT DATE '2020-07-05',20 FROM dual), 

flow(dt) AS(
SELECT DATE '2020-07-01' FROM dual UNION ALL
SELECT DATE '2020-07-02' FROM dual UNION ALL
SELECT DATE '2020-07-03' FROM dual UNION ALL
SELECT DATE '2020-07-04' FROM dual UNION ALL
SELECT DATE '2020-07-05' FROM dual 
)
SELECT
    f.dt flow_date
    ,r.dt rate_date
    ,r.rate rate_on_flow_date
FROM flow f
OUTER APPLY    (
    SELECT 
        r.dt
        ,r.rate
    FROM rates r
    WHERE
        r.dt<=f.dt
    ORDER BY
        r.dt desc
        FETCH next 1 ROWS ONLY) r
order by
    f.dt
;

FLOW_DATERATE_DATERATE_ON_FLOW_DATE01.07.202001.07.20201002.07.202001.07.20201003.07.202003.07.20201504.07.202003.07.20201505.07.202005.07.202020



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.7.0.0.0 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 0
...
Рейтинг: 0 / 0
04.08.2020, 13:59
    #39986382
VladimirKr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На MS SQL это делается так, а вот как на Oracle
andreymx,

Спасибо.
Вы спасли кучу моего времени...
...
Рейтинг: 0 / 0
04.08.2020, 14:03
    #39986384
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На MS SQL это делается так, а вот как на Oracle
VladimirKr
andreymx,

Спасибо.
Вы спасли кучу моего времени...
если версия подойдёт

11 и ниже не прокатит
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / На MS SQL это делается так, а вот как на Oracle / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]