WITH
users AS (
SELECT
*
FROM
`logs.registeredUsers`),
initiallyForgotten AS (
SELECT
DISTINCT userID,
schedule,
users.timestamp AS registrationDate,
cardID
FROM
`logs.reviews`
JOIN
`users`
USING
(userID)
WHERE
sessionID IS NULL AND reviewMarking = “remembered” AND
cardID IN(
SELECT
cardID
FROM
`logs.latestEssaysCards`
WHERE
essayName=“qcvc”)
),
subsequentReviews AS (
SELECT
*,
RANK() OVER (PARTITION BY userID, cardID ORDER BY timestamp) AS fullReviewCount
FROM
`logs.reviews`
JOIN
initiallyForgotten
USING
(userID,
cardID)
WHERE
sessionID IS NOT NULL
AND (beforeInterval > 1000*60*60*48 OR schedule=“original”) AND (schedule != “aggressiveStart” OR registrationDate > TIMESTAMP(“2019-09-09”)))
SELECT
beforeInterval / (1000*60*60*24),
COUNT(DISTINCT userID) AS N,
COUNT(*) AS promptN,
COUNTIF(reviewMarking=“remembered”) / COUNT(*) AS accuracy
FROM
subsequentReviews
WHERE
fullReviewCount = 1
GROUP BY
beforeInterval
ORDER BY
beforeInterval