Счета, которые набрали> = 41 день просрочки 171 дней до и осталось> = 41 - PullRequest
0 голосов
/ 07 декабря 2018

в течение 171 последовательных дней 171-й даты и когда дата 171-й даты наступает по состоянию на последнюю дату обработки / рабочую дату, т. Е. PROCDATE.Я написал приведенный ниже запрос, по сути, используя два CTE, но он не работает.В частности, он создает учетные записи, которые были просрочены по крайней мере на 41 день последовательно в течение 171 дня, но НЕ на последнюю дату обработки, т. Е. PROCDATE.Я также не могу сообщить о кредитах, которые могли упасть ниже 41 дня, и я не могу сообщить о кредитах, которые просто просрочены по крайней мере на 41 день в течение 171 дня, если они не достигли 171 по PROCDATE, поэтому для дальнейшей демонстрации мне точно нужноОтчет, большинство из них относятся к следующим сценариям: 1. Счет падает выше и ниже 41 дня, прежде чем в итоге остаться> = 41 день в течение 171 дня.Я хочу сообщить о таких займах только с того момента, как они просрочены на 41 день подряд в течение 171 рабочего дня, начиная с PROCDATE.2. Счет становится> = 41 просроченным и никогда не переходит больше 41 дня на 171 день подряд с PROCDATE.3. Счет выходит на> = 41 день просрочки, а затем никогда не опускается ниже 41 и зависает между 41 и 100+ просроченными днями по состоянию на PROCDATE.Я уверен, что есть другие сценарии, но мне нужно получить учетные записи, которые соответствуют критериям на последний день обработки, то есть PROCDATE.Я не могу сообщить о кредитах, которые соответствовали критериям два или более дней назад, неделю назад и т. Д. Это ключевой момент.

К сожалению, в моем отчете не отражены ссуды, соответствующие критериям PROCDATE.Он захватывает все кредиты, которые были> = 41 дней в прошлом, независимо от PROCDATE и независимо от того, когда они пошли> = 41 дней.Один кредит соответствовал критериям, но по состоянию на 20181101 год, а не к PROCDATE, который на сегодняшний день является вчерашним днем ​​20181206. Важно, что он также не правильно учитывает кредиты с того момента, когда они в последний раз просрочены на срок> = 41.Один кредит, представленный в следующих отчетах о кодах, был просрочен более чем на 100 дней, а по состоянию на PROCDATE он был просрочен на 122 дня с (и до) 20160611, но встретил 171 день на 20181129. В этом, я думаю, нравится решение - оно неверно для SET @BEGDATE вернулись на 171 день из PROCDATE без учета того, что сначала они прошли> = 41 день.В моем первом и отдельном отчете просто рассматриваются все ссуды, которые достигли> = 41 дня, тогда как в предыдущий день они были <41 день просрочены (каждый раз).Короче говоря, решение было для: ((ISNULL (li.PDDAYSREG, 0)> = 42) и ISNULL (ld.PDDAYSREG, 0) <42) </p>

Таблицы, использованные для этого отчета (имена полейиспользуются довольно понятно): dbo.dim_dates = таблица трендов всех FULLDATE, т. е. все обработки относятся к 20071231 dbo.tbl_Daily_Processing_Dates = таблица суточных различных дат обработки, т. е. PROCDATE = дата последней обработки / бизнес-даты dbo.tbl_loan_daily_info =ежедневная таблица с множеством полей для всех учетных записей(

DECLARE @BEGDATE datetime, @PROCDATE datetime;

SET @PROCDATE = (SELECT PROCDATE FROM 
dbo.tbl_Daily_Processing_Dates);
SET @BEGDATE  = (SELECT NextProcessingDate FROM dbo.dim_Dates WHERE 
FullDate = DATEADD(dd, -171, @PROCDATE));

WITH PD_CTE (PROCDATE, ACCTNO, NXTPAYDATE, LSTPMTDATE, PDDAYS, 
PDITOT)
AS (
SELECT PROCDATE, ACCTNO, NXTPAYDATE, LSTPMTDATE, PDDAYSREG
FROM dbo.tbl_Loan_Daily_Info
WHERE PDDAYS BETWEEN 41 AND 211 --221=41+170
),

PDMINMAX_CTE (ACCTNO, MIN_PDDAYS, MAX_PDDAYS, DAY_COUNT, MIN_DATE, 
MAX_DATE)
AS (
SELECT 
A.ACCTNO, MIN(B.PDDAYS) as MIN_PDDAYS, MAX(B.PDDAYS) as MAX_PDDAYS, 
COUNT(*) AS DAY_COUNT, MIN(B.FILEDATE) as MIN_DATE, 
MAX(B.FILEDATE) as MAX_DATE
FROM PD_CTE as A
INNER JOIN dw.Loan_Daily_Info as B
   ON A.ACCTNO = B.ACCTNO AND B.ACTYPE = 'L'
WHERE B.FILEDATE BETWEEN @BEGDATE AND @PROCDATE
GROUP BY A.ACCTNO
)

SELECT *, DATEDIFF(dd, MIN_DATE, MAX_DATE) as DATE_DIFF, @PROCDATE, 
@BEGDATE
FROM PDMINMAX_CTE
WHERE MIN_PDDAYS >= 41 AND MAX_PDDAYS >= 41 
ORDER BY ACCTNO;

`

1 Ответ

0 голосов
/ 07 декабря 2018

Здесь много информации, но вы должны использовать для этого оператор CASE.Вы используете условие where для разделения дат, но вы можете сделать для этого оператор CASE, а затем вызывать это поле как хотите.

...