And for user_1 1 and eventtime 2:40 it should return 3, too?
I don't think there's an easy way to get this result, even a cursor or recursive query will fail.
Some fancy SQL using cross joins might work, but performance will be horrible for larger tables.
This would be a task for a cumulative count using RANGE, but this syntax is not implemented in Teradata.
based on the description the result should be the number of rows within 60 minutes before the current row's eventtime, i.e. a moving count (not cumulative as I wrote in my first post).
Without OLAP (but possibly very bad performance):
SELECT t1.user_id, t2.eventtime, COUNT(*) -1
FROM tab AS t1 JOIN tab AS t2
ON t1.user_id = t2.user_id
AND t1.eventtime BETWEEN t2.eventtime - INTERVAL '1' HOUR AND t2.eventtime
GROUP BY 1,2