Рассмотрим ниже DDL & DML:Вычислить Войти интервал времени в MySQL
CREATE TABLE `EventLog` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`actiontype` varchar(20) NOT NULL,
`executiondate` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;
INSERT INTO EventLog (actiontype,executiondate)
values
('LOGIN','2014-09-12 12:34:37'),
('LOGOUT','2014-09-12 12:58:37'),
('LOGIN','2014-09-12 13:12:25'),
('LOGOUT','2014-09-12 14:25:37'),
('LOGIN','2014-09-12 16:45:00'),
('LOGOUT','2014-09-12 18:00:31'),
('LOGIN','2014-09-12 20:05:37'),
('LOGOUT','2014-09-12 20:34:37'),
('LOGIN','2014-09-13 02:15:10'),
('LOGOUT','2014-09-13 03:05:22'),
('LOGIN','2014-09-13 06:10:45'),
('LOGOUT','2014-09-12 08:34:37');
Теперь я хочу, чтобы вычислить Войти интервал времени.
Например, у меня есть дата начала -> 2014-09-12 12:44:37 и дата окончания - 2014-09-12 12:59:37. Здесь пользователь вошел в систему в 2014-09-12 12:59:37, но наша дата начала ввода больше, чем она. Поэтому рассмотрим дату начала ввода. То же самое в конце дате-времени. Здесь дата окончания ввода больше, чем вышла дата-время (проверьте данные таблицы mysql - 2014-09-12 12:59:37), а затем рассмотрите выведенную дату-время.
В соответствии с этой логикой для этого сценария вывод будет 14 мин..
Это SQL Fiddle для практики.
Заранее спасибо
Edit: Последние SQL Fiddle с колонкой имя пользователя.
Я думаю, отсутствует столбец пользователя, без этого можно предположить, что следующая запись после авторизации является Выход. Попробуйте с этим 'ВЫБРАТЬ A.id "ИД" , b.Id "B ID" , a.ActionType "действие" , b.ActionTYpe "B Действие" , a.ExecutionDate "А ExecutionDate" , b.ExecutionDate «B ExecutionDate» , TIMESTAMPDIFF (SECOND, a.executiondate, b.executiondate) «Время» FROM EventLog внутреннее объединение EventLog b где (a.id + 1) = b.id и a. ActionType = 'LOGIN'' – Max
Это не соответствует моей логике, снова прочитайте вопрос. – unknown