WITH
withTimestamps AS (SELECT *, FIRST_VALUE(timestamp) OVER (PARTITION BY cardID, userID ORDER BY timestamp) AS firstTimestamp FROM `logs.reviews`),
withEssayNames AS (SELECT * FROM (SELECT * FROM withTimestamps WHERE firstTimestamp >= TIMESTAMP("2020-10-28")) JOIN (SELECT essayName, cardID FROM `logs.latestEssaysCards`) USING (cardID))
SELECT * FROM withEssayNames ORDER BY userID, cardID, timestamp