русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задача. Вьюшка с аналитическими функциями по вкладам.


Дата добавления: 2015-08-31; просмотров: 665; Нарушение авторских прав


Дана таблица вкладчиков 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;



<== предыдущая лекция | следующая лекция ==>
Написать запрос о том, какой процесс в какое время начинался, в какое время заканчивался и сколько секунд работал. | Задача. Календарь с аналитикой.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.423 сек.