Разделить одну строку на несколько строк в зависимости от диапазона дат на сервере sql - PullRequest
0 голосов
/ 26 мая 2020

my SQL структура таблицы сервера выглядит примерно так, как показано ниже

FROM_Currency   To_Currency   ExchangeRate   StartDate    EndDate
EUR               GBP            33.5        2018-03-31    2018-04-30
USD               EUR            22.9        2019-01-31    2019-02-28

, например, здесь есть данные об обменном курсе для нескольких валют и обменный курс за более чем 3 года, как показано в таблице выше, мы начали date и enddate для каждого курса валюты в диапазоне 1 месяц, мне нужно в основном разделить его на каждый день, поэтому в основном нужен ежедневный обменный курс, например: для 1-й записи мне нужно 30 строк, в которых должно быть указано from_currency как EUR и To_currency как GBP и обменный курс как 33,5, а в столбце новой даты должна быть дата приращения, начиная с 31.03.2018 по 30.04.2018.

1 Ответ

0 голосов
/ 26 мая 2020

В одном из вариантов используется рекурсивный запрос:

with cte as (
    select 
         from_currency, 
         to_currency, 
         exchange_rage, 
         startDate, 
         endDate, 
         startDate currentDate
    from mytable t
    union all
    select 
         from_currency, 
         to_currency, 
         exchange_rage, 
         startDate, 
         endDate, 
         dateadd(day, 1, currentDate)
    from cte
    where currentDate < endDate
)
select from_currency, to_currency, exchange_rage, currentDate from cte

Если какой-либо из ваших периодов охватывает более 100 дней, вам необходимо добавить option(maxrecursion 0) в конце запроса.

...