powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / На MS SQL это делается так, а вот как на Oracle
4 сообщений из 4, страница 1 из 1
На MS SQL это делается так, а вот как на Oracle
    #39986372
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую.
Возникла разовая задача не по моей специализации.
На 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
На MS SQL это делается так, а вот как на Oracle
    #39986377
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
На MS SQL это делается так, а вот как на Oracle
    #39986382
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

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

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

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


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