Дана таблица вкладчиков KK_DEPOSIT из задачи "Пакет функций о вкладах".
Написать вьюшку по таблице KK_DEPOSIT с группировкой по CLIENT_NAME и с полями:
· CLIENT_NAME
· число дней от открытия первого вклада до сегодняшнего дня
· список DEPOSIT_ID через запятую
· дата последнего вклада
· сумма последнего вклада
· сумма предпоследнего вклада(если есть)
Создадим требуемую вьюшку. Во внутреннем подзапросе вычислим сумму предыдущего вклада - таким образом, сумма предпоследнего вклада будет доступна в строке с максимальным DT для каждого CLIENT_NAME:
CREATE OR REPLACE VIEW VW_KK_DEPOSIT AS
SELECT CLIENT_NAME,
TRUNC(SYSDATE - MIN(DT)) FIRST_DEPOSIT_LENGTH_IN_DAYS,
WM_CONCAT(DEPOSIT_ID) DEPOSIT_ID_LIST,
MAX(DT) LAST_DEPOSIT_DATE,
MAX(AMOUNT) KEEP(DENSE_RANK LAST ORDER BY DT) LAST_DEPOSIT_AMOUNT,
MAX(PREVIOUS_AMOUNT) KEEP(DENSE_RANK LAST ORDER BY DT) PENULTIMATE_DEPOSIT_AMOUNT
FROM (SELECT DEPOSIT_ID,
CLIENT_NAME,
DT,
AMOUNT,
LAG(AMOUNT) OVER(PARTITION BY CLIENT_NAME ORDER BY DT) PREVIOUS_AMOUNT
FROM KK_DEPOSIT)
GROUP BY CLIENT_NAME;
О функции WM_CONCAT будет подробнее рассказано в главе «“Расклейка” и “склейка” строк».
Здесь заметим, что для WM_CONCAT не получается указать условие на сортировку DEPOSIT_ID. Если такая сортировка потребуется, то нужно будет использовать SYS_CONNECT_BY_PATH.
Проверим результат:
SELECT * FROM VW_KK_DEPOSIT;