As Trisha notes, you could use an outer join but that would probably be an expensive operation given that most users have a large number of interactions, but I'm putting that below for reference.
Monthly active users:
SELECT COUNT(DISTINCT user_id) AS num_active_users
FROM user_activity
WHERE datetime BETWEEN DATE_ADD(CURRENT_DATE, -30) AND CURRENT_DATE
Churned users:
SELECT COUNT(DISTINCT a.user_id) as num_churned
FROM user_activity a
FULL OUTER JOIN
user_activity b
ON a.user_id = b.user_id
WHERE a.datetime BETWEEN DATE_ADD(CURRENT_DATE, -30) AND CURRENT_DATE
AND b.datetime BETWEEN DATE_ADD(CURRENT_DATE, -60) AND DATE_ADD(CURRENT_DATE, -31)
WHERE a.user_id IS NULL -- user was not active in the last 30 days, but was active in the previous 31-60 days
Churned users:
SELECT COUNT(DISTINCT a.user_id) as num_resurrected
FROM user_activity a
FULL OUTER JOIN
user_activity b
ON a.user_id = b.user_id
WHERE a.datetime BETWEEN DATE_ADD(CURRENT_DATE, -30) AND CURRENT_DATE
AND b.datetime BETWEEN DATE_ADD(CURRENT_DATE, -60) AND DATE_ADD(CURRENT_DATE, -31)
WHERE b.user_id IS NULL -- user was not active in the last 60-31 days but was active in the last 30 days