Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
Порылся по форуму, тем похожих много, но что-то конкретно подходящего для себя не нашел.

Вопрос собственно в следующем. Есть таблица:

user_id varchar2,
action_id number,
date_action date

В нее пишутся логи действий пользователей. Как можно к ней написать селект, чтобы он выводил количество действий для конкретного пользователя за каждые ХХ минут дня?

т.е. пользователь 1 выполнил 100 операций с 13.00-13.30
5 операций с 13.30-14.00 и т.д.
27 май 08, 16:45    [5722528]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
Понимаю что нужно использовать аналитику, но прикрутить ее как-то не получается
27 май 08, 16:58    [5722672]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
Colobok
Понимаю что нужно использовать аналитику, но прикрутить ее как-то не получается
group by trunc(date_action),
	  TRUNC((date_action - TRUNC(date_action)) * 24 * 60 / :p_xx)
27 май 08, 17:07    [5722744]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
вместо ваших (попугаев) тут по получасу группируются тронутые за день узер_обжекты
with t as (
select trunc(sysdate)+(level-1)/48 d1
      ,trunc(sysdate)+level/48-1/(24*60*60) d2
  from dual
  connect by level <= 48
) select to_char(d1,'hh24:mi')||'-'||to_char(d2,'hh24:mi') hh
        ,count(last_ddl_time) c
    from t, user_objects
   where last_ddl_time (+) between d1 and d2
   group by to_char(d1,'hh24:mi')||'-'||to_char(d2,'hh24:mi');
27 май 08, 17:24    [5722870]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
Боюсь что предложенный шаблон не пригодится, так как в эту таблицу пишутся данные приложеним.
27 май 08, 17:32    [5722954]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Colobok
Боюсь что предложенный шаблон не пригодится, так как в эту таблицу пишутся данные приложеним.

И что?
27 май 08, 17:34    [5722971]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
Мне нужно получить данные на момент времени, а не по расписанию. т.е. за каждые ХХ минут.
27 май 08, 17:40    [5723024]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
В предложенном запросе сутки делятся по пол часа и все идет от этого, а мне нужно разделить диапазон дат в таблице с шагом по ХХ минут.
27 май 08, 17:42    [5723040]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Colobok
В предложенном запросе сутки делятся по пол часа и все идет от этого, а мне нужно разделить диапазон дат в таблице с шагом по ХХ минут.

Надо - делите .. проблема где?
27 май 08, 17:45    [5723079]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Colobok
В предложенном запросе сутки делятся по пол часа и все идет от этого, а мне нужно разделить диапазон дат в таблице с шагом по ХХ минут.
Может перечитаете свой первоначальный пост???

То ли Вы не понимаете предложенное, то ли не умеете сказать, что Вам нужно. Попробуйте привести пример вх. и вых. данных
27 май 08, 17:45    [5723085]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
Скорее не получается скачать что требуется.

Данные в таблице:

user_id action_id date_action
-------------------------------
19 134 23.05.2008 12:43:09.000000
20 501 23.05.2008 12:43:27.000000
12 345 23.05.2008 12:46:28.000000
12 435 23.05.2008 12:48:29.000000
13 123 23.05.2008 12:48:29.000000

Берем в качестве примера интервал 3 минуты (предполагается что можеь быть любой) и а вызоде должны получить что-то вроде:

user_id count(action_id) interval
---------------------------------
19 1 12:43:00-12:45:59
20 1 12:43:00-12:45:59
12 2 12:46:00-12:49:00
13 1 12:46:00-12:49:00

Вообщем что-то вот в таком духе.
27 май 08, 18:15    [5723374]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
Colobok
Скорее не получается скачать что требуется.

Данные в таблице:

user_id action_id date_action
-------------------------------
19 134 23.05.2008 12:43:09.000000
20 501 23.05.2008 12:43:27.000000
12 345 23.05.2008 12:46:28.000000
12 435 23.05.2008 12:48:29.000000
13 123 23.05.2008 12:48:29.000000

Берем в качестве примера интервал 3 минуты (предполагается что можеь быть любой) и а вызоде должны получить что-то вроде:

user_id count(action_id) interval
---------------------------------
19 1 12:43:00-12:45:59
20 1 12:43:00-12:45:59
12 2 12:46:00-12:49:00
13 1 12:46:00-12:49:00

Вообщем что-то вот в таком духе.
ты мой пост внимательно читал?
27 май 08, 18:39    [5723537]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
Почил, но взлететь с ним не получилось :(
27 май 08, 18:42    [5723556]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
A.K.
Member

Откуда: Пенза
Сообщений: 2571
Посчитайте, сколько интервалов длиной xx в сутках, где xx - произвольный интервал в заданной единице измерения.
27 май 08, 18:58    [5723651]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
:p_xx := 3
WITH pivot AS
(
	SELECT 1 user_id,  0 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')		   date_action FROM dual UNION ALL
	SELECT 1 user_id,  1 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+1/24/60 date_action FROM dual UNION ALL
	SELECT 1 user_id,  2 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+2/24/60 date_action FROM dual UNION ALL
	SELECT 1 user_id,  3 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+3/24/60 date_action FROM dual UNION ALL
	SELECT 1 user_id,  4 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+4/24/60 date_action FROM dual UNION ALL
	SELECT 1 user_id,  5 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+5/24/60 date_action FROM dual UNION ALL
	SELECT 1 user_id,  6 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+6/24/60 date_action FROM dual UNION ALL
	SELECT 1 user_id,  7 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+7/24/60 date_action FROM dual UNION ALL
	SELECT 1 user_id,  8 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+8/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 10 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')		   date_action FROM dual UNION ALL
	SELECT 2 user_id, 11 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+11/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 12 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+12/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 13 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+13/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 14 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+4/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 15 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+5/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 16 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+16/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 17 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+17/24/60 date_action FROM dual UNION ALL
	SELECT 2 user_id, 18 action_id, TO_DATE('01.01.2008 11:00', 'dd.mm.rrrr hh24:mi')+18/24/60 date_action FROM dual
)
SELECT	user_id, COUNT(*),
		TO_CHAR(
		TRUNC(date_action)+
		TRUNC( (date_action-TRUNC(date_action)) *24*60 / :p_xx)*:p_xx/24/60, 'dd.mm.rrrr hh24.mi') trunc_date_action
FROM pivot
GROUP BY user_id, TRUNC(date_action),
		TRUNC( (date_action-TRUNC(date_action)) *24*60 / :p_xx)
Row#USER_IDCOUNT(*)TRUNC_DATE_ACTION
11301.01.2008 11.00
21301.01.2008 11.03
31301.01.2008 11.06
42101.01.2008 11.00
52201.01.2008 11.03
62101.01.2008 11.09
72201.01.2008 11.12
82201.01.2008 11.15
92101.01.2008 11.18
28 май 08, 08:46    [5724655]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про запрос  [new]
Colobok
Member

Откуда:
Сообщений: 33
Понял, спасибо большое.
28 май 08, 11:39    [5725753]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить