आप वर्तमान में लॉग इन किए गए विज़िटर के रनिंग योग की गणना करने के लिए MySQL वैरिएबल का उपयोग कर सकते हैं और फिर अधिकतम प्राप्त कर सकते हैं:
SET @logged := 0;
SET @max := 0;
SELECT
idLoginLog, type, time,
(@logged := @logged + IF(type, 1, -1)) as logged_users,
(@max := GREATEST(@max, @logged))
FROM logs
ORDER BY time;
SELECT @max AS max_users_ever;
(SQL Fiddle )
संपादित करें: मेरे पास एक सुझाव भी है कि स्पष्ट रूप से लॉग आउट नहीं किए गए उपयोगकर्ताओं से कैसे निपटें। मान लें कि आप मानते हैं कि कोई उपयोगकर्ता 30 मिनट के बाद अपने आप लॉग आउट हो जाता है:
SET @logged := 0;
SET @max := 0;
SELECT
-- Same as before
idLoginLog, type, time,
(@logged := @logged + IF(type, 1, -1)) AS logged_users,
(@max := GREATEST(@max, @logged)) AS max_users
FROM ( -- Select from union of logs and records added for users not explicitely logged-out
SELECT * from logs
UNION
SELECT 0 AS idLoginnLog, l1.username, ADDTIME(l1.time, '0:30:0') AS time, 0 AS type
FROM -- Join condition matches log-out records in l2 matching a log-in record in l1
logs AS l1
LEFT JOIN logs AS l2
ON (l1.username=l2.username AND l2.type=0 AND l2.time BETWEEN l1.time AND ADDTIME(l1.time, '0:30:0'))
WHERE
l1.type=1
AND l2.idLoginLog IS NULL -- This leaves only records which do not have a matching log-out record
) AS extended_logs
ORDER BY time;
SELECT @max AS max_users_ever;
(Fiddle )