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

Откуда:
Сообщений: 891
Здравствуйте.

Подскажите пожалуйста, как написать запрос:
Есть таблица TimeRows, в которой хранятся идентификаторы пользователей и временные интервалы с их длительностью в минутах.
Нужно посчитать сумму дэльт по каждой подгруппе, но если в подгруппе есть пересекающиеся диапазоны, то их рассматривать как один диапазон с минимальным (среди пересекающихся) StartTime и максимальным (EndTime) и суммировать уже разницу уже нового диапазона.

К примеру есть таблица:

UserIDStartTimeEndTimeDelta
1472018-12-01 18:002018-12-01 22:00240
1472018-12-01 18:302018-12-01 22:30240
1472018-12-01 17:002018-12-01 21:30270
1472018-12-01 22:402018-12-01 23:0020
1472018-12-01 23:102018-12-01 23:3020
2082018-12-02 20:002018-12-02 21:0060
2082018-12-02 21:302018-12-02 23:0090


первые три записи суммировать нельзя т.к. диапазоны их пересекаются. Нужно посчитать дельту StartTime = 2018-12-01 17:00 - EndTime = 2018-12-01 22:30 дельта будет равна 330 мин. (а не 750)

С остальными записями всё ок, их диапазоны не пересекаются.

В итоге таблица должна получиться такой:

UserIDSumDelta
147330
14740
208150
14 дек 18, 08:35    [21763633]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.. Нужно правильно просуммировать.  [new]
MAULER
Member

Откуда:
Сообщений: 891
(ошибся)upd: Конечно же EndTime - StartTime
14 дек 18, 08:38    [21763634]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.. Нужно правильно просуммировать.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20517
Если диапазон 1 пересекается с диапазоном 2, тот ещё пересекается с диапазоном 3, но диапазоны 1 и 3 не пересекаются - как считать?
14 дек 18, 09:44    [21763676]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.. Нужно правильно просуммировать.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20517
Если у пересекающихся диапазонов разная дельта - какую брать после их объединения?
14 дек 18, 09:44    [21763677]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.. Нужно правильно просуммировать.  [new]
MAULER
Member

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

Если у пересекающихся диапазонов разная дельта, то брать не готовую дельту, а считать её из максимального EndTime и минимального StartTime
14 дек 18, 09:52    [21763685]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.. Нужно правильно просуммировать.  [new]
MAULER
Member

Откуда:
Сообщений: 891
Если диапазон 1 пересекается с диапазоном 2, тот ещё пересекается с диапазоном 3, но диапазоны 1 и 3 не пересекаются - как считать?


3-------------20
5--------------26
21--------------30


то дельту считать как 30-3
14 дек 18, 09:55    [21763688]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.. Нужно правильно просуммировать.  [new]
court
Member

Откуда:
Сообщений: 2013
MAULER
Если диапазон 1 пересекается с диапазоном 2, тот ещё пересекается с диапазоном 3, но диапазоны 1 и 3 не пересекаются - как считать?


3-------------20
5--------------26
21--------------30


то дельту считать как 30-3
поиском по "кончала" можно найти с полдюжины вариантов решения этой задачи :)
14 дек 18, 11:00    [21763767]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом.. Нужно правильно просуммировать.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20517
MAULER
считать её из максимального EndTime и минимального StartTime
А если они - у разных записей с разной дельтой?
MAULER
то дельту считать как 30-3
Ищите темы по словам "объединить диапазоны".
14 дек 18, 11:02    [21763775]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить