У меня есть таблица, в которой сохраняются данные кредита сотрудника. Некоторые работники получают ссуду еженедельно и желают возвращать каждый взнос еженедельно, а некоторые желают возвращать платежи ежемесячно.
Я хочу получить общую продолжительность периода кредита, если сотрудник хочет возвращать платежи еженедельно, тогда он должен выдавать результат, например 5 Weeks
или 10 Weeks
, но если сотрудник хочет возвращать платежи ежемесячно, он должен давать результат, например 4 Months
или 15 Months
.
Вот пример данных
LoanID DueDate AmountToBePaid
2 2019-01-01 500
2 2019-01-07 500
2 2019-01-14 500
2 2019-01-21 500
2 2019-01-28 500
3 2019-01-01 1500
3 2019-02-01 1500
3 2019-03-01 1500
3 2019-04-01 1500
Вот что я пробовал, но это дает результат в течение нескольких недель, независимо от того, должны ли ежемесячно выплачиваться взносы, как для кредита с идентификатором 3.
SELECT
LoanId,
DATEDIFF(WEEK, inst_start, inst_end) weeks
FROM LoanMaster LM
INNER JOIN (
SELECT
dateadd(month, -1,min(duedate)) inst_start,
max(duedate) inst_end
FROM LoanDetail
) LD
ON LM.ID = LD.LoanID
Выход должен быть таким:
LoanId Duration
2 4 Weeks
3 3 Months
Если ваши данные строго следуют правилу, согласно которому для одного и того же LoanID DueDates будут либо только последовательными неделями, либо только последовательными месяцами, тогда мы можем вывести период, разделив диапазон на количество строк:
SELECT
LoanID,
case
when datediff(month,min(DueDate),max(dueDate))=count(*)-1
then str(datediff(month,min(DueDate),max(dueDate)))+' Months'
else
str(datediff(week,min(DueDate),max(dueDate)))+' Weeks'
end as Duration
FROM LoanMaster LM
GROUP BY LOANID