|
Помогите решить интересную задачку
|
|||
---|---|---|---|
#18+
Уважаемые спецы. Большая просьба помочь с одной интересной задачкой. Необходимо получить список кредитов, которые на момент расчета имеют непогашенную задолженность, и рассчитать для каждого такого кредита: 1. Общую (накопленную) сумму просроченного долга непогашенную (не выплаченную) к моменту расчета. 2. Дату начала текущей (последней) просрочки. Под датой начала просрочки, в данной задаче понимается первая дата непрерывного периода, в котором общая сумма просроченного непогашенного долга > 0.Учесть, что периодов просрочек может быть несколько. 3. Кол-во дней текущей просрочки. Таблица: Date Customer Deal Cur Sum 12.12.2009 111110 111111 RUR 12000 25.12.2009 111110 111111 RUR 5000 12.12.2009 111110 122222 RUR 10000 12.01.2010 111110 111111 RUR -10100 Плюс - это появление просрочки. Минус - гашение кредита. У меня засада с получением дат. 1. Создал таблицу: drop table if exists PDCL CREATE TABLE PDCL ("DATA" DATETIME, "CUSTOMER" VARCHAR(8), "DEAL" VARCHAR(8), "CURRENCY" VARCHAR(4), "SUM" INT ); INSERT INTO PDCL VALUES ('12.12.2009','111110','111111','RUR',12000); INSERT INTO PDCL VALUES ('25.12.2009','111110','111111','RUR',5000); INSERT INTO PDCL VALUES ('12.12.2009','111110','122222','RUR',10000); INSERT INTO PDCL VALUES ('12.01.2010','111110','111111','RUR',-10100); INSERT INTO PDCL VALUES ('20.11.2009','220000','222221','RUR',25000); INSERT INTO PDCL VALUES ('20.12.2009','220000','222221','RUR',20000); INSERT INTO PDCL VALUES ('31.12.2009','220001','222221','RUR',-10000); INSERT INTO PDCL VALUES ('29.12.2009','111110','122222','RUR',-10000); INSERT INTO PDCL VALUES ('27.11.2009','220001','222221','RUR',-30000); INSERT INTO PDCL VALUES ('30.12.2010','220001','122222','RUR',5000); INSERT INTO PDCL VALUES ('30.12.2011','220001','122222','RUR',-5000); INSERT INTO PDCL VALUES ('30.12.2012','220001','122222','RUR',3000); INSERT INTO PDCL VALUES ('30.12.2013','220001','122222','RUR',3000); 2. Создал вспомогательную табличку: CREATE VIEW qwerty as SELECT P.DATA, P.DEAL, P.SUM, COALESCE(SUM(P.SUM) OVER(PARTITION BY P.DEAL ORDER BY P.DATA ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 0) AS TOTAL_AMOUNT, RANK() OVER(PARTITION BY P.DEAL ORDER BY P.DATA DESC) AS R FROM PDCL P WHERE P.DATA <= GETDATE(); 3. И создал процедуру. SELECT P.DEAL, P.TOTAL_AMOUNT, -- 1. Общая (накопленная) сумма просрочки q.DELAY_START_DATE, -- 2. Дата начала текущей (последней) просрочки DATEDIFF(day, q.DELAY_START_DATE, GETDATE()) AS Number_days_delay -- 3. Кол-во дней текущей просрочки FROM qwerty as P left join (select data as DELAY_START_DATE, qwerty.deal from (SELECT min(r)-1 as r, deal as deal from qwerty where TOTAL_AMOUNT <= 0 group by deal) as asdf left JOIN qwerty on qwerty.r = asdf.r and qwerty.deal = asdf.deal) as q on p.deal =q.deal WHERE P.R = 1 AND P.TOTAL_AMOUNT > 0; Засада в том, что данная процедура вытаскивает только те кредиты, по которым человек или уже гасил один раз кредит или вносил больше средств, чем задолженность. Но вот как оставить эту логику, но ещё и добавить те кредиты, по которым задолженность возникла и ни разу не гасилась в ноль, не понимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 17:35 |
|
Помогите решить интересную задачку
|
|||
---|---|---|---|
#18+
Чего в ней интересного? Тестовое задание я айти-макаки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 18:51 |
|
Помогите решить интересную задачку
|
|||
---|---|---|---|
#18+
GodExecutive, авторкредиты, по которым задолженность возникла и ни разу не гасилась в ноль подсчитайте нарастающий итог по балансу каждого кредита, выберите те кредиты, у которых нет ни одной отрицательной записи среди строк итога. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2021, 21:09 |
|
|
start [/forum/topic.php?fid=46&msg=40084477&tid=1684503]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 140ms |
0 / 0 |