lời giới thiệu của a rất có ý nghĩa. Ngoài ra, tính toán thời lượng cho mỗi phiên khi đăng xuất là một cách tiếp cận tốt hơn nhiều - mặc dù điều này không được bình thường hóa hoàn toàn, nhưng nó sẽ phân chia tải trọng tính toán ....
SELECT ilv.employee,
SUM(UNIX_TIMESTAMP(logouttime)
- IF(logintime IS NULL,
UNIX_TIMESTAMP(logouttime),
UNIX_TIMESTAMP(logintime)))
FROM (
SELECT a.employeeId, a.time AS logouttime,
(SELECT MAX(b.time)
FROM log b
WHERE b.employeeId=a.employeeId
AND b.time<a.time
AND b.type='login') as logintime
FROM log a
WHERE a.type='logout'
AND a.time BETWEEN <range start> AND <range end>
AND employeeId=1 /* optional */
) ilv
GROUP BY ilv.employeeId