SQL
x
USE cswiki_p;
SET @n = '5'; # <<edits threshold, default 5>>
SET @u = '30'; # <<activity unit in days, default 30>>
SET @T = '20170420000000'; # <<end date passed in, or each date between start and end if timeseries>>
SELECT user_name FROM user WHERE user_id IN (
SELECT user_id
FROM (/* Get revisions to content pages that are still visible */
SELECT user_id,
SUM(rev_id IS NOT NULL) AS revisions
FROM user
INNER JOIN
logging ON log_user = user_id
LEFT JOIN
revision ON rev_user = user_id
WHERE log_type = 'newusers'
AND log_action = 'create'
AND user_registration BETWEEN (@T - interval @u day) AND @T
AND rev_timestamp BETWEEN (@T - interval @u day) AND @T
GROUP BY user_id
UNION ALL
/* Get revisions to content pages that have been archived */
SELECT user_id,
/* Note that ar_rev_id is sometimes set to NULL :( */
SUM(ar_id IS NOT NULL) AS revisions
FROM user
INNER JOIN
logging ON log_user = user_id
LEFT JOIN
archive ON ar_user = user_id
WHERE log_type = 'newusers'
AND log_action = 'create'
AND user_registration BETWEEN (@T - interval @u day) AND @T
AND ar_timestamp BETWEEN (@T - interval @u day) AND @T
GROUP BY user_id
) AS user_content_revision_count
GROUP BY user_id
HAVING SUM(revisions) >= @n
);
By running queries you agree to the Cloud Services Terms of Use and you irrevocably agree to release your SQL under CC0 License.
All SQL code is licensed under CC0 License.