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

Откуда:
Сообщений: 502
Имеется таблица в базе данных. Каждые n секунд в таблицу в поле VALUE пишется целочисленное значение (количество-запросов к серверу). Также в поле TIMESTAMP пишется текущее дата-время. Имеются и другие столбцы (FK), но здесь мы ими принебрежем. Следующий скрипт возвращает количество запросов к определенному серверу в определенный промежуток времени за день:

SELECT SUM(VALUE) FROM METRIC
WHERE (
SAMPLE_ID=(SELECT SAMPLE_ID FROM SAMPLE_INFO WHERE (RESOURCE_PATH='Some' AND METRIC_PATH='Some' AND PARAMETER_NAME='Some'))
AND 
(MU_ID=(SELECT MU_ID FROM MANAGED_UNIT WHERE MANAGED_UNIT_KEY='Some'))
AND
TIMESTAMP BETWEEN TO_TIMESTAMP('18-08-2007 16:00:00' ,'DD-MM-YYYY HH24:MI:SS') AND TO_TIMESTAMP('18-08-2007 16:30:00' ,'DD-MM-YYYY HH24:MI:SS'));

Если принебречь ненужными (в данном контексте) столбцами, то это будет так:

SELECT SUM(VALUE) FROM METRIC
WHERE (
TIMESTAMP BETWEEN TO_TIMESTAMP('18-08-2007 16:00:00' ,'DD-MM-YYYY HH24:MI:SS') AND TO_TIMESTAMP('18-08-2007 16:30:00' ,'DD-MM-YYYY HH24:MI:SS'));

Соответствующие значения даты-времени подставляются в java с помощью PreparedStatement.

Теперь нужно сделать запрос, который возьмет 20 дней и за эти дни вычислит максимальное количество _запросов_за_день_, т.е., например, сегодня это количество было 200, вчера 700, а в понедельник 15000, так вот он должен быть 15000.

Немного туплю, помогите мыслью.
29 авг 07, 13:37    [4591055]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
Who am I
помогите мыслью.

select MAX(SUM(VALUE)) from ... where ... GROUP BY trunc(date_field)
29 авг 07, 13:42    [4591105]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
гост
Member

Откуда:
Сообщений: 27
что то наподобие
 
select max(i.t)
from
(SELECT SUM(VALUE),trunc(TIMESTAMP ,'dd') i FROM METRIC
WHERE (
TIMESTAMP BETWEEN TO_TIMESTAMP('18-08-2007 16:00:00' ,'DD-MM-YYYY HH24:MI:SS') AND TO_TIMESTAMP('18-08-2007 16:30:00' ,'DD-MM-YYYY HH24:MI:SS'))  t
29 авг 07, 13:44    [4591123]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
Who am I
Member

Откуда:
Сообщений: 502
Нда...
Что-то мои познания в SQL оказывается не такие уж широкие...
Где можно почитать документацию о том что вы тут написали? :)
29 авг 07, 13:55    [4591232]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116251
andrey_anonymous
Who am I
помогите мыслью.

select MAX(SUM(VALUE)) from ... where ... GROUP BY trunc(date_field)


... а если вдруг автору еще и сам соответствующий день понадобится, то

SQL> select max(count(*)),
  2         max(trunc(hiredate)) keep (dense_rank last order by count(*))
  3  from scott.emp
  4  group by trunc(hiredate)
  5  /
 
MAX(COUNT(*)) MAX(TRUNC(HIREDATE))KEEP(DENSE
------------- ------------------------------
            2 03.12.1981
 
SQL> 

Правда при равенстве показателя покажет только один день ...
29 авг 07, 14:02    [4591315]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
пларб
Guest
гост
что то наподобие
 
select max(i.t)
from
(SELECT SUM(VALUE),trunc(TIMESTAMP ,'dd') i FROM METRIC
WHERE (
TIMESTAMP BETWEEN TO_TIMESTAMP('18-08-2007 16:00:00' ,'DD-MM-YYYY HH24:MI:SS') AND TO_TIMESTAMP('18-08-2007 16:30:00' ,'DD-MM-YYYY HH24:MI:SS'))  t


group by trunc(TIMESTAMP ,'dd') в подзапросе забыли
29 авг 07, 14:03    [4591329]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
Who am I
Member

Откуда:
Сообщений: 502
Трындец...
Я ничего не понял.

Буду курить книги.
29 авг 07, 14:19    [4591498]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
Who am I
Member

Откуда:
Сообщений: 502
наверное все-таки что-то дошло.
поправьте меня если я не прав:

1. нам нужно выбрать максимум из какой-то последовательности.
2. каждая из этих последовательностей представляет собой выборку SUM(VALUE) за определенный день, чтобы сделать это, делаем запрос как и изначальный, только не на 1 день, а на 20 и группируем по дням.
29 авг 07, 15:45    [4592482]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
Who am I
наверное все-таки что-то дошло.
поправьте меня если я не прав:

1. нам нужно выбрать максимум из какой-то последовательности.
2. каждая из этих последовательностей представляет собой выборку SUM(VALUE) за определенный день, чтобы сделать это, делаем запрос как и изначальный, только не на 1 день, а на 20 и группируем по дням.

Браво :)
29 авг 07, 16:47    [4593179]     Ответить | Цитировать Сообщить модератору
 Re: Скриптец  [new]
Who am I
Member

Откуда:
Сообщений: 502
Осталось прочитать небольшую книженцию и сделать все это. :)
Но суть я понял, спасибо большое.
29 авг 07, 17:16    [4593481]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить