При этом используется синтаксис Oracle, поэтому для MySql может потребоваться некоторая очистка, но вы можете использовать серию подзапросов, чтобы выбрать из таблицы, произошла ли активность в течение каждой из 4 недель, а затем подвести итоги по пользователю, а затем выберите только пользователей, которые имели активность> 0 в каждую неделю.
select user_id from
{
select user_id, SUM(in_week_0) sum_week_0,SUM(in_week_1) sum_week_1,SUM(in_week_2) sum_week_2,SUM(in_week_3) sum_week_3 from
(
select user_id,
activity_date,
CASE
WHEN activity_date < '01-MAY-11' AND activity_date >= '24-APR-11' THEN 1
ELSE 0
END in_week_0,
CASE
WHEN activity_date < '24-APR-11' AND activity_date >= '17-APR-11' THEN 1
ELSE 0
END in_week_1,
CASE
WHEN activity_date < '17-APR-11' AND activity_date >= '10-APR-11' THEN 1
ELSE 0
END in_week_2,
CASE
WHEN activity_date < '10-APR-11' AND activity_date >= '03-APR-11' THEN 1
ELSE 0
END in_week_3
from table
)
group by user_id
)
where sum_week_0 > 0 and sum_week_1 > 0 and sum_week_2 > 0 and sum_week_3 > 0;