подсчет производительности труда пользователя

masag
Дата: 06.03.2007 09:41:36
Здраствуйте!
Подскажите идею как лучше реализовать следующее:
Есть операторы, которые манипулируют данными БД (создание, обновление, удаление). В таблицу Stat заносятся след.данные:кто, когда (время), операция (что сделал)
ch_user           date_create                 Action
sveta              02.03.2007 09:00:10         1
sveta              02.03.2007 09:00:10         1
sveta              02.03.2007 09:00:10         1
sveta              02.03.2007 09:00:10         1
sveta              02.03.2007 09:00:12         3
lena                02.03.2007 10:00:10         1
lena                02.03.2007 10:03:10         2
lena                02.03.2007 11:00:10         3

Нужно просчитать разницу между первым и последним зафиксированным временем по каждой операции и каждому пользователю, если перерыв между соседними датами фиксации одинаковых операций больше 15 минут, то соотвественно из общего времени по операции нужно вычесть 15 минут.
Q u a d r o
Дата: 06.03.2007 10:26:26
select ch_user,
	action,
	sum( (date_created - prev_dt) - case when date_created - prev_dt >= 1/24/4 then 15/1440 else 0 end ) * 86400 seconds
	from (
		select ch_user, 
			date_created,
			action,
			lag(date_created, 1, date_created) over (partition by ch_user, action order by date_created) prev_dt
		from t
) group by ch_user, action;
masag
Дата: 06.03.2007 10:41:29
Q u a d r o
select ch_user,
	action,
	sum( (date_created - prev_dt) - case when date_created - prev_dt >= 1/24/4 then 15/1440 else 0 end ) * 86400 seconds
	from (
		select ch_user, 
			date_created,
			action,
			lag(date_created, 1, date_created) over (partition by ch_user, action order by date_created) prev_dt
		from t
) group by ch_user, action;

Огромное спасибо! Элегантно...
masag
Дата: 07.03.2007 08:57:18
элегантность присутствует, но но то что результат действительно выражен в секундах меян сильно смущает...
Q u a d r o
Дата: 07.03.2007 09:15:48
masag
элегантность присутствует, но но то что результат действительно выражен в секундах меян сильно смущает...

Лучше не смущайтесь, а предоставьте test case.
masag
Дата: 07.03.2007 10:17:19
Приношу свои извинения .... я не прав...ошибался каюсь.
Теперь у меня другая проблемс есть, как учитывать переход даты, чтобы суммирование происходило только по одному дню.
Спасибо.
Q u a d r o
Дата: 07.03.2007 10:44:06
masag
Приношу свои извинения .... я не прав...ошибался каюсь.
Теперь у меня другая проблемс есть, как учитывать переход даты, чтобы суммирование происходило только по одному дню.
Спасибо.


lag(...) over (partition by ch_user, action, trunc(date_create) order by ...)

group by ch_user, action, trunc(date_create)