WITH
reviews AS (SELECT *, RANK() OVER (PARTITION BY userID, cardID ORDER BY timestamp) AS sessionNumber, TIMESTAMP_DIFF(timestamp, LAG(timestamp) OVER (PARTITION BY userID ORDER BY timestamp), SECOND) AS dt FROM `logs.reviews` WHERE sessionID IS NOT NULL AND isRetry IS FALSE)
SELECT APPROX_QUANTILES(dt, 4), beforeInterval, COUNT(*) FROM reviews WHERE timestamp >= TIMESTAMP("2020-04-01") AND dt <= 90 AND sessionNumber = 1 GROUP BY beforeInterval ORDER BY beforeInterval