|
Программирование >> Преобразование значений null
Последний шаг - применить соответствующие агрегатные функции и найти, сколько транзакций произошло в течение каждого пятисе-кундного интервала, а также время начала и завершения каждой транзакции: select ceil(trx id/5.0) as grp, min(trx date) as trx start, max(trx date) as trx end, sum(trx cnt) as total from trx log group by ceil(trx id/5.0) GRP TRX START TRX END TOTAL 1 28-JUL-2005 19:03:07 28-JUL-2005 19:03:11 141 2 28-JUL-2005 19:03:12 28-JUL-2005 19:03:16 178 3 28-JUL-2005 19:03:17 28-JUL-2005 19:03:21 202 4 28-JUL-2005 19:03:22 28-JUL-2005 19:03:26 173 Если ваши данные немного отличаются от рассматриваемых (скажем, строки не имеют ID), всегда можно создать подобные группы путем деления секунд из значений TRX DATE на 5. Затем для каждого значения TRX DATE включаем часы и группируем по фактическому часу и логической группе , GRP. Ниже представлен пример реализации такой техники (фигурирующие здесь функции Oracle TO CHAR и TO NUMBER необходимо заменить на функции работы с датами и форматирования символов, соответствующие используемой платформе): select trx date,trx cnt, to number(to char(trx date,hh24)) hr, ceil(to number(to char(trx date-1/24/60/60,miss))/5.0) grp from trx log
Суть здесь в том, что группировка осуществляется для каждых 5 секунд независимо от фактических значений GRP. После этого уже можно применять агрегатные функции, так же как и в исходном решении: select hr,grp,sum(trx cnt) total from ( select trx date,trx cnt, to number(to char(trx date,hh24)) hr, ceil(to number(to char(trx date-1/24/60/60,miss))/5.0) grp
Группировать транзакции по часу можно, если журнал транзакций охватывает большие промежутки времени. В DB2 и Oracle такой же результат можно получить с помощью оконной функции SUM OVER. Следующий запрос возвращает все строки таблицы TRX LOG и, логически их группируя, вычисляет промежуточные суммы (столбец TRX CNT) и общую сумму транзакций TOTAL (столбец TRX CNT) в каждой строке группы : select trx id, trx date, trx cnt, sum(trx cnt)over(partition by ceil(trx id/5.0) order by trx date range between unbounded preceding and current row) runing total,
Агрегация разных групп/сегментов одновременно Задача Требуется осуществить агрегацию в разных измерениях одновременно. Например, необходимо получить результирующее множество, в котором для каждого сотрудника перечислены имя, отдел, количество служащих в отделе (включая его самого), количество служащих, занимающих ту же должность, что и он (также включая его самого), и общее число служащих в таблице EMP. Таким образом, результирующее множество должно иметь следующий вид:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |