
Untitled
By: a guest on
May 6th, 2012 | syntax:
None | size: 1.07 KB | hits: 12 | expires: Never
How to calculate an SQL MAX() for any N-second duration within a certain timeframe
-- Timestamped log of users viewing items
CREATE TABLE user_item_views (
user_id integer,
item_id integer,
timestamp timestamp
);
User ID Max items viewed in N seconds, between START and END.
... ...
... ...
... ...
SELECT
s.timestamp,
v.user_id,
(
SELECT COUNT(*) FROM user_item_views
WHERE timestamp BETWEEN s.timestamp AND ADDTIME(s.timestamp, '00:00:59')
AND user_id = v.user_id
) item_count
FROM
every_second s
LEFT JOIN user_item_views v ON v.timestamp = s.timestamp
GROUP BY
s.timestamp,
v.user_id
SELECT
user_id
, MAX(max_count) AS max_count
FROM
( SELECT
a.user_id
, COUNT(*) AS max_count
FROM
user_item_views AS a
JOIN
user_item_views AS b
ON a.user_id = b.user_id
AND a.timestamp <= b.timestamp
AND b.timestamp < a.timestamp + INTERVAL 60 SECOND
GROUP BY
a.user_id
, a.timestamp
) AS grp
GROUP BY
user_id