SQL

Простая задача на SQL

Помогите, пожалуйста, с решением.
Во вложении.
Или дайте наводку каким образом решать.
P.S left джойн не катит; окошки LAG/LEAD тоже не помогут.
Заранее спасибо!
Могу только ответ
L.s.d .
L.s.d .
30 358
Лучший ответ
Не ответ, просто примитивный набросок без диалектов. Может поможет..По идее должен быть цикл по датам из carry (помечены как var) с update на тут полученные значения..
 select t_cursum * actual.t_rate res 
from carry
full join
(
select t_rate
from currency_rate
where t_date =
(
select max(r.t_date)
from carry c
inner join currency_rate r
on c.t_date >= r.t_date
and c.t_curcode = r.t_curcode
where c.t_date = date'2017-01-08'/*var*/
)
) actual
where t_date = date'2017-01-08'/*var*/;
Сначала дата установки *актуального на дату проводки* курса определяется, потом по ней актуальное значение курса, потом перевод в рубли..

Даты изменил, потому что с датами со скрина смысла в задаче нет..
Исходная таблица курсов валют - s. В ней d - дата, r - курс. Диалект oracle. В результате колонка r2 - нужный тебе курс. Делай join на свою дату и считай.
with u (d,r,dn,rn,uo) as (select to_number(to_char(d,'j')),r,to_number(to_char(nvl(lead(d,1)over(order by d),d),'j'))dn,nvl(lead(r,1) over (order by d),r)rn,1 from s
union all select d+1,null,dn,rn,uo+1 from u where d+1<dn),
d (d,r,dn,rn,do) as (select to_number(to_char(d,'j')),r,to_number(to_char(nvl(lag(d,1) over (order by d),d),'j'))dn,nvl(lag(r,1) over (order by d),r)rn,1
union all select d-1, null,dn,rn,do+1 from d where d-1>dn)
select to_date(u.d,'j')d,u.r,
case when uo=do and uo=1 then u.r else case when uo>do then u.rn else d.rn end end r2
from u join d on u.d=d.d order by d
Павел Тимофеев
Павел Тимофеев
11 370
Расчетные значения полей хранить в реляционной СУБД не нужно
(исключения могут быть, - в бух. и скл. программах - сальдо на начало периода [год, месяц, день(иногда)])

Тогда вопрос - как запросом получить проводки с суммой в рублях:
скинь готовую таблицу и помогу
делов на 3 клика
Олег Двуреченский готовую таблицу это как?