Вы вставляете каждый показанный вопрос в таблицу журнала с помощью question_id / user_id, а затем показывает ему те, которые не соответствуют:
SELECT [TOP 1] ...
FROM questions
WHERE question_id NOT IN (
SELECT question_id
FROM question_user_log
WHERE userd_id = <current_user>)
[ORDER BY ...]
или
SELECT [TOP 1] ...
FROM questions AS q
LEFT OUTER JOIN question_user_log AS l ON q.question_id = l.question_id
AND l.user_id = <current_user>
WHERE l.question_id IS NULL
[ORDER BY...]
после того, как вы показываете вопрос, вы
INSERT INTO question_user_log (question_id, user_id)
VALUES (<question shown>, <current_user>);