考慮下面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練習。
在此先感謝
編輯:最新SQL Fiddle與username列。
我覺得缺少用戶列,沒有它,你可以假設登錄之後的下一個記錄是註銷。與此嘗試'SELECT a.Id 「A ID」 ,b.Id 「B ID」 ,a.ActionType 「A行動」 ,b.ActionTYpe 「B行動」 ,a.ExecutionDate 「A ExecutionDate」 ,b.ExecutionDate「B ExecutionDate」 ,TIMESTAMPDIFF(SECOND,a.executiondate,b.executiondate)「Time」 FROM EventLog內部連接EventLog b 其中(a.id + 1)= b.id 和a。 ActionType ='LOGIN'' – Max 2014-09-13 13:09:05
這不是按照我的邏輯,再次閱讀問題。 – unknown 2014-09-13 13:37:45