В настоящее время хранит график платежей следующим образом:Создать список диапазонов дат из списка дат
Item No | Due Date | Amount Due
108 | 2013-02-01 | 60.00
108 | 2013-02-26 | 60.00
108 | 2013-03-01 | 60.00
108 | 2013-03-15 | 60.00
Примечания: разница между датами противоречива, то есть некоторые пункты могут быть недели, двухнедельный или месяцев.
Что в идеале нужно работать, как повторно запросить таблицу выше в следующем формате:
Item No | Due Date | Date From | Date To | Amount Due
108 | 2013-02-01 | 2013-01-14 | 2013-02-25 | 60.00
108 | 2013-02-26 | 2013-02-26 | 2013-02-28 | 60.00
108 | 2013-03-01 | 2013-03-01 | 2013-03-14 | 60.00
108 | 2013-03-15 | 2013-03-15 | 2013-03-25 | 60.00
Лишние две даты, чтобы быть пропущена в, чтобы это было возможно будет Start Дата (2013-01-14) и сегодняшняя дата (2013-03-25).
Каждый диапазон должен исходить из первоначальной даты платежа до дня до следующей даты исполнения.
Любой совет будет оценен.
UPDATE
Вот что я пытался до сих пор:
WITH
CTE_Repayments(AgreementID, DueDate, AmountDue)
AS
(
-- Anchor Member Definition
SELECT
AgreementID, StartDate, CONVERT(DECIMAL(9,2),0.00)
FROM
Loans AS L
WHERE
L.AgreementID = 111
UNION ALL
-- Recursive Member Definition
SELECT
RB.AgreementID, RB.DueDate, CONVERT(Decimal(9,2),RB.AmountDue)
FROM
(
SELECT *
FROM RepaymentBreakdown
WHERE AgreementID = 111
) AS RB
INNER JOIN
CTE_Repayments AS R
ON RB.AgreementID = R.AgreementID
)
-- Statement that Executes CTE
SELECT AgreementID, DueDate, AmountDue
FROM CTE_Repayments
Но это не работает.
Я предполагаю, что мне нужно добавить запись с датой начала в качестве члена привязки.
OK Теперь он возвращает данные с измененным кодом выше.
Проблема у меня сейчас является то, что результирующий набор не ограничивается AgreementID от якоря и я получаю сообщение об ошибке:
Msg 530, Level 16, State 1, Line 1 The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
Что делать, если нет предыдущей 'Due Date'? – Kermit
Всегда есть список дат. Как я уже сказал, мы будем проходить в StartDate в качестве первой даты каждый раз. –
Пробовал ли что-нибудь? – Kermit