@neonox

Как правильно составить SQL-запрос?

Коллеги, приветствую!
Есть БД с MYSQL со следующей таблицей
CREATE TABLE `table3` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`session_id` CHAR(50) NULL DEFAULT NULL COLLATE 'utf8_bin',
	`iteration_id` VARCHAR(250) NULL DEFAULT NULL COLLATE 'utf8_bin',
	`date_time` DATETIME NULL DEFAULT NULL,
	`topic` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_bin',
	`customer_id` CHAR(50) NULL DEFAULT NULL COLLATE 'utf8_bin'
)


В таблице по одному пользователю может быть неограниченное количество записей в рамках неограниченного количества сессий
Следующий код
SELECT 
customer_id,
session_id,
date_time
FROM TABLE3
WHERE customer_id = '104232'

Возвращает
Пример вывода

"104232" "11705" "2019-10-11 16:47:19"
"104232" "11705" "2019-10-11 16:47:21"
"104232" "11705" "2019-10-11 16:47:58"
"104232" "11705" "2019-10-11 16:48:17"
"104232" "11705" "2019-10-11 16:48:36"
"104232" "11705" "2019-10-11 16:48:55"
"104232" "11717" "2019-10-11 22:48:49"
"104232" "11717" "2019-10-11 22:48:51"
"104232" "11717" "2019-10-11 22:49:39"
"104232" "11717" "2019-10-11 22:49:55"
"104232" "11717" "2019-10-11 22:50:17"
"104232" "11717" "2019-10-11 22:53:16"
"104232" "11717" "2019-10-11 22:54:48"
"104232" "11719" "2019-10-11 23:14:21"
"104232" "11719" "2019-10-11 23:14:23"
"104232" "11719" "2019-10-11 23:14:39"
"104232" "11719" "2019-10-11 23:14:52"
"104232" "11719" "2019-10-11 23:16:44"
"104232" "11719" "2019-10-11 23:17:25"
"104232" "11719" "2019-10-11 23:18:24"


Что требуется.
Вывести id клиента, id сессии, дату/время начала сессии, дату время завершения сессии с целью посчитать временной лаг между завершением одной и началом следующей сессии.

В MSSQL вот такой код приводит к успеху, а вот MySQL не могу побороть((

SELECT table_time.*,
lead (stop_session, 1, SYSDATE) over (PARTITION BY customer_id ORDER BY start_session) AS next_sess_time,
lead (stop_session, 1, SYSDATE) over (PARTITION BY customer_id ORDER BY start_session) - start_session AS lost_time
FROM
(
SELECT 
customer_id,
session_id,
date_time,
MIN(date_time) AS start_session,
MAX(date_time) AS stop_session
FROM TABLE3
GROUP BY session_id AS table_time
)
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы