|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
Уважаемые!!! Подскажите пожалуйста как в MySQL посчитать суммарную продолжительность сеансов по пользователю в течении дня... На клиенте нет возможности, увы. С MySQL раньше не работал, курсором сходу не получилось сделать. "version" "5.7.29-0ubuntu0.18.04.1" Табличка простая. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Сеансов за день может быть много, они из разных офисов (caption_text) и на разные компьютеры (computer_id). Признак начала сеанса значение (type) = 1, заканчивается значением 2. Вывести юзера, самое ранее время по "caption_text", самое позднее и сумму сеансов по этому "caption_text". Компьютер, с которым соединяются (computer_id) не важен, в течении дня их может быть много разных, в течение сеанса его значение не меняется. Кусочек данных: Таблица frtsmon INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242557, '2020-03-11 00:03:23', 1, 'user2', 'OFFICE1', 3); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242561, '2020-03-11 00:15:39', 1, 'user1', 'OFFICE1', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242563, '2020-03-11 00:18:18', 2, 'user1', 'OFFICE1', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242564, '2020-03-11 00:20:39', 1, 'user1', 'OFFICE2', 3); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242566, '2020-03-11 00:23:19', 2, 'user1', 'OFFICE2', 3); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242568, '2020-03-11 00:24:20', 1, 'user1', 'OFFICE1', 6); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242569, '2020-03-11 00:28:01', 2, 'user1', 'OFFICE1', 6); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242570, '2020-03-11 00:30:36', 1, 'user1', 'OFFICE1', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242571, '2020-03-11 00:33:16', 2, 'user1', 'OFFICE1', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242573, '2020-03-11 00:34:06', 1, 'user3', 'OFFICE1', 4); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242574, '2020-03-11 00:35:36', 1, 'user1', 'OFFICE2', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242575, '2020-03-11 00:38:16', 2, 'user1', 'OFFICE2', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242576, '2020-03-11 00:39:06', 1, 'user1', 'OFFICE1', 2); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242577, '2020-03-11 00:43:16', 2, 'user4', 'OFFICE2', 5); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1242578, '2020-03-11 00:43:16', 2, 'user1', 'OFFICE1', 2); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1243578, '2020-03-11 00:45:35', 1, 'user1', 'OFFICE1', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1243579, '2020-03-11 00:48:14', 2, 'user1', 'OFFICE1', 7); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1243586, '2020-03-11 01:11:10', 2, 'user4', 'OFFICE2', 5); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1243596, '2020-03-11 01:11:10', 2, 'user3', 'OFFICE1', 4); INSERT INTO "frtsmon" ("login_id", "tm", "type", "user_name", "caption_text", "computer_id") VALUES (1243630, '2020-03-11 01:49:08', 2, 'user2', 'OFFICE1', 3); ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 17:50 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
IgorL Кусочек данных: Структуру и данные лучше представлять в виде fiddle . Вот сразу и скажи - что должно получиться для пользователя user4? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 19:15 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
Akina, возможно у USER4 съехал тип при копировании. Посмотрел в базе, там 1 и 2. Возможен и переход через ночь, сеанс может начаться в один день, а закончиться в следующий... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:01 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
IgorL Akina, возможно у USER4 съехал тип при копировании. Посмотрел в базе, там 1 и 2. Сеансы без начала? Сеансы без конца? Пересекающиеся по времени сеансы? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:05 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
IgorL, И как вообще связаны записи одного сеанса? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:08 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
miksoft, в запросе не знаю. На клиенте я бы обрабатывал ошибку четности количества строк с группировкой по юзеру. И при нечетном уходил бы на отдельные запросы поиска минимального/максимального по типам, с присвоением 00:00 или 23:59 на краях "дырок". Два сеанса на одном computer_id физически не начнутся, пересечения по времени исклечены, но если все же "потеряется" строка с типом, искать ближайшую по времени противоположного типа и принимать ее за начало/конец. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:31 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
fiddle . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:41 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
miksoft IgorL, И как вообще связаны записи одного сеанса? Сеанс user_name начинается с type=1 и заканчивается type=2. computer_id = computer_id в пределах одного сеанса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:45 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
IgorL с присвоением 00:00 или 23:59 на краях "дырок" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2020, 20:53 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
Akina, Спасибо! Сам бы я до такого точно не додумался. ( Скорости бы ему еще, на месячных данных конца не дождался, отрезал в отдельную табличку сутки, ее за 10 секунд на i5 перемолол. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 00:42 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
miksoft IgorL с присвоением 00:00 или 23:59 на краях "дырок" Может конечно. Но "отбивка" сутки, что бы не получалось больше 24 часов лучше обрезать по 00:00...23:59. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 00:48 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
IgorL Скорости бы ему еще Если логика допускает - выбросите из запроса (и индекса) caption_text . ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2020, 12:12 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
Akina, в таблице уже есть индекс и explain показывает что он используется. Убрал поле caption_text из запроса, прибавки скорости практически не заметил. За сутки отрабатывает нормально, сделал процедуру копирования выборки за сутки в отдельную табличку и по ней считаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 11:20 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
IgorL в таблице уже есть индекс ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 11:48 |
|
Помогите пожалуйста с подсчетом времени по таблице
|
|||
---|---|---|---|
#18+
Akina Какой именно? который в первом посте показан? да он ниачём в этом запросе... Этот UNIQUE INDEX `login_id_tm_type_computer_id` (`tm`, `login_id`, `type`, `computer_id`) USING BTREE Почему ниочем? Я не силен в MySQL, но все поля, по которым идет основная выборка перечислены, или у MySQL UNIQUE INDEX не участвует select ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 14:45 |
|
|
start [/forum/topic.php?fid=47&msg=39946037&tid=1828639]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
362ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 290ms |
total: | 743ms |
0 / 0 |