One approach here is to make a join so that both current and archive entries are in the same logical table, but to organize them so that the current entries get a higher priority if they exist. I assign position 1 for current records and 2 for archived records. Then I order this item and save 200 records.
SELECT col1, col2, ... FROM ( SELECT col1, col2, ..., 1 AS position FROM activities WHERE user_id = 87 UNION ALL SELECT col1, col2, ..., 2 FROM archived_activities WHERE user_id = 87 ) t ORDER BY position LIMIT 200;
source share