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

Откуда:
Сообщений: 316
есть таблица с данными в формате
начало сессии | конец сессии | длительность сессии
сессии могут быть параллельными
как определить моменты, когда количество одновременных сессий максимально?
25 фев 14, 10:37    [15624008]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
vartAG
Member

Откуда:
Сообщений: 17
Можно через CTE каждую сессею разложить на моменты времени, а затем сгруппировать по ним и определить максимальное кол-во. Вопрос только в чем фиксируются у тебя промежутки, какие форматы данных для столбцов?
25 фев 14, 10:56    [15624115]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
aux3
Member

Откуда:
Сообщений: 316
vartAG,

Что значит разложить через CTE?

первый, второй столбец datetime
третий int (длительность сессии)
25 фев 14, 11:53    [15624611]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
aleks2
Guest
Не слушай двоешников.

Достаточно тупо посчитать количество сессий на моменты времени [начало сессии] и выбрать максимальное значение.

Делается self JOIN и группировка.
25 фев 14, 12:17    [15624761]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
vartAG
Member

Откуда:
Сообщений: 17
aux3,

Простой пример, если у тебя только даты хранятся:
ID DateSt DateEnd Period
1 20.03.2014 22.03.2014 3
2 21.03.2014 24.03.2014 4
3 22.03.2014 24.03.2014 3

Запросом каждая строка расскладывается по дням:

1 20.03.2014
1 21.03.2014
1 22.03.2014

2 21.03.2014
2 22.03.2014
2 23.03.2014
2 24.03.2014

3 22.03.2014
3 23.03.2014
3 24.03.2014

Потом все это группируешь и ищешь максимальное кол-во. Тут получается что в 22 числе 3 транзакции.
Вот только это на днях все так красиво. А если идет речь о секундах, то тут всю систему повесит с таким алгоритмом )
Момент времени в твоей задаче это что? Минута, час или секунда? И о каком объеме данных идет речь?
25 фев 14, 12:18    [15624766]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
aleks2
Guest
vartAG
aux3,

Простой пример, если у тебя только даты хранятся:
ID DateSt DateEnd Period
1 20.03.2014 22.03.2014 3
2 21.03.2014 24.03.2014 4
3 22.03.2014 24.03.2014 3

Запросом каждая строка расскладывается по дням:

1 20.03.2014
1 21.03.2014
1 22.03.2014

2 21.03.2014
2 22.03.2014
2 23.03.2014
2 24.03.2014

3 22.03.2014
3 23.03.2014
3 24.03.2014

Потом все это группируешь и ищешь максимальное кол-во. Тут получается что в 22 числе 3 транзакции.
Вот только это на днях все так красиво. А если идет речь о секундах, то тут всю систему повесит с таким алгоритмом )
Момент времени в твоей задаче это что? Минута, час или секунда? И о каком объеме данных идет речь?

Больной продолжал бредить...

У тя серверу заняться нечем?
25 фев 14, 12:20    [15624774]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
vartAG
Member

Откуда:
Сообщений: 17
aleks2,

Я просто думал что надо определять отрезок загруженности.
Например были транзакции
16-00 по 16-59
16-10 по 16-30
16-20 по 16-40

По идее тут пик будет 16-20, но закончится он не в 16-40, а в 16-30.
25 фев 14, 12:46    [15624981]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
aux3
Member

Откуда:
Сообщений: 316
vartAG, так и нужно.
Требуется знать что в 16-20 было максимальное количество сессий
25 фев 14, 12:58    [15625094]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
vartAG
Запросом каждая строка расскладывается по дням:
А почему по дням, а не по секундам???

Самый простой и очевидный способ:
aleks2
Достаточно тупо посчитать количество сессий на моменты времени [начало сессии] и выбрать максимальное значение.
обычный запрос с group by
25 фев 14, 13:01    [15625118]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
aleks2
Guest
vartAG
aleks2,

Я просто думал что надо определять отрезок загруженности.
Например были транзакции
16-00 по 16-59
16-10 по 16-30
16-20 по 16-40

По идее тут пик будет 16-20, но закончится он не в 16-40, а в 16-30.

Даже, если "отрезок" - это делается проще.
Просто найди ближайщий "конец сессии".
25 фев 14, 13:02    [15625121]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
Glory
Member

Откуда:
Сообщений: 104751
aux3
Требуется знать что в 16-20 было максимальное количество сессий

А в 16-21 не нужно уже ?
25 фев 14, 13:02    [15625123]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
vartAG
Member

Откуда:
Сообщений: 17
aleks2,

А так ты прав, ступил, зачем сразу скорую вызывать? )
25 фев 14, 13:02    [15625127]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
aux3
Member

Откуда:
Сообщений: 316
Glory,

точнее здесь две задачи

1) Требуется знать максимальное количество сессий

2) Для анализа на графике потребуется видеть что в 16-10 было 2 сессии; 16-20, 16-21 и далее уже 3 сессии
25 фев 14, 13:08    [15625171]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
vartAG
Member

Откуда:
Сообщений: 17
aleks2
vartAG
aleks2,

Я просто думал что надо определять отрезок загруженности.
Например были транзакции
16-00 по 16-59
16-10 по 16-30
16-20 по 16-40

По идее тут пик будет 16-20, но закончится он не в 16-40, а в 16-30.

Даже, если "отрезок" - это делается проще.
Просто найди ближайщий "конец сессии".


А если за этим ближайшим концом отрезка начинается новая транзакция? Наш интервал продолжается по идее. Понятно, что это фантастика, но все же.
25 фев 14, 13:11    [15625190]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
Glory
Member

Откуда:
Сообщений: 104751
aux3
1) Требуется знать максимальное количество сессий

С какой дискретностью ?

aux3
2) Для анализа на графике потребуется видеть что в 16-10 было 2 сессии; 16-20, 16-21 и далее уже 3 сессии

В 16-10/20... любого дня ? Или текущей даты ?
25 фев 14, 13:11    [15625192]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
Добрый Э - Эх
Guest
aux3,

развернуть (unpivot и его заменители) таблицу из вида (начало, кончало) в вид (дата, флаг даты). Где флаг даты делать плюс один (+1) для даты начала и минус один (-1) для даты кончала. После накопительным итогом посчитать в сортировке по дате. Взять максимум.
25 фев 14, 13:28    [15625353]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
vartAG
aleks2
пропущено...

Даже, если "отрезок" - это делается проще.
Просто найди ближайщий "конец сессии".


А если за этим ближайшим концом отрезка начинается новая транзакция? Наш интервал продолжается по идее. Понятно, что это фантастика, но все же.
Да нужно в этом же запросе считать количество сессий на каждый момент завершения сессии.

И результатом будет период, у которой максимум по началам сессий, и одновременно максисмум по концу (эти 2 числа совпадают, если периоды сессий не выходит за исследуемый диапазон времени, если есть такое условие)

Если бы ТС сделал тестовый скрипт с данными, давно бы уже запрос написали бы.
25 фев 14, 13:50    [15625606]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
Добрый Э - Эх
Guest
как вариант...
25 фев 14, 13:52    [15625620]     Ответить | Цитировать Сообщить модератору
 Re: максимальное количество одновременных сессий  [new]
vartAG
Member

Откуда:
Сообщений: 17
alexeyvg
vartAG
пропущено...


А если за этим ближайшим концом отрезка начинается новая транзакция? Наш интервал продолжается по идее. Понятно, что это фантастика, но все же.
Да нужно в этом же запросе считать количество сессий на каждый момент завершения сессии.

И результатом будет период, у которой максимум по началам сессий, и одновременно максисмум по концу (эти 2 числа совпадают, если периоды сессий не выходит за исследуемый диапазон времени, если есть такое условие)

Если бы ТС сделал тестовый скрипт с данными, давно бы уже запрос написали бы.


Ну да, все гениальное - просто ) Надо немного усложнить просто.
25 фев 14, 14:18    [15625861]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить