аоуоуа... я понял, почему у меня тогда курсор был, потому что валют разных много - и по дате надо вычислять для конкретной валюты
Это гениально! Просто календарь перемножил с курсами...
WITH all_courses AS (
SELECT
*
FROM [nsi].[currency]
WHERE CharCode IN ('USD','PLN')
)
, all_currency_codes AS (
SELECT
DISTINCT
CharCode
FROM all_courses
)
SELECT
all_c.CharCode
,[cal_date]
,cur.[Value] AS real_value
,cur2.[Value] AS counted_value
FROM [nsi].[ru_calendar] cal
LEFT JOIN all_currency_codes all_c ON 1 = 1
LEFT JOIN all_courses cur ON cur.[date] = cal.cal_date AND cur.CharCode = all_c.CharCode
OUTER APPLY (SELECT TOP 1
[Value]
FROM all_courses c2 WHERE c2.[date] <= cal.cal_date AND c2.CharCode = all_c.CharCode
ORDER BY [date] DESC) cur2
WHERE
[cal_date] >= '2020-09-20'
AND [cal_date] <= '2020-10-01'
ORDER BY 1,2