How about using ranking functions?
WITH Answers AS
(
SELECT *
FROM (VALUES
(1, 1, 't'),
(2, 1, 't'),
(3, 1, 'f'),
(4, 1, 't'),
(5, 1, 't'),
(6, 1, 't'),
(7, 2, 't'),
(8, 1, 't')
) AS tbl(xxxid, userid, answer)
),
A AS
(
SELECT Answers.*, ROW_COUNT() OVER(PARTITION BY userid ORDER BY xxxid) AS RN1
FROM Answers
),
B AS
(
SELECT A.xxxid, A.userid,
A.RN1 - ROW_COUNT() OVER(PARTITION BY A.userid ORDER BY A.xxxid) AS GF
FROM A
WHERE A.answer = 't'
),
C AS
(
SELECT B.*,
COUNT() OVER(PARTITION BY B.userid, B.GF) AS CNT,
MAX(B.xxxid) OVER(PARTITION BY B.userid, B.GF) AS MAXID,
MAX(B.GF) OVER(PARTITION BY B.userid) AS MAXGF
FROM B
)
SELECT userid, CNT
FROM C
WHERE C.MAXGF = C.GF AND C.MAXID = C.xxxid
Haven't actually tested it so I'm biting my lip a bit.