如何使用SQL执行此搜索?

如何使用SQL执行此搜索?,sql,Sql,我有三个表,其中包含以下(相关)列: 问题:级别、答案\u id 选项:问题id、答案id、用户id、回答日期 用户:id,级别 用户将看到问题,当他们通过选择一个可用答案来回答问题时,这将创建一个choices记录,并为answer\u id分配适当的值。用户可以多次回答问题 我需要一个查询,告诉我,考虑到每个问题的最新选择,有多少是正确答案。我知道足够多的SQL是危险的,但这一个是我的头 例如: 问题 id level answer_id ------------------ 1

我有三个表,其中包含以下(相关)列:

  • 问题:级别、答案\u id
  • 选项:问题id、答案id、用户id、回答日期
  • 用户:id,级别
用户将看到问题,当他们通过选择一个可用答案来回答问题时,这将创建一个
choices
记录,并为
answer\u id
分配适当的值。用户可以多次回答问题

我需要一个查询,告诉我,考虑到每个问题的最新选择,有多少是正确答案。我知道足够多的SQL是危险的,但这一个是我的头

例如:

问题

id level answer_id
------------------
1    1     101
2    1     102
3    1     103
4    2     110
question_id answer_id user_id date_answered
--------------------------------------------
1           101       201     2019-01-24
1           104       201     2019-01-25
2           105       201     2019-01-25
2           102       201     2019-01-26
3           103       201     2019-01-26
选择

id level answer_id
------------------
1    1     101
2    1     102
3    1     103
4    2     110
question_id answer_id user_id date_answered
--------------------------------------------
1           101       201     2019-01-24
1           104       201     2019-01-25
2           105       201     2019-01-25
2           102       201     2019-01-26
3           103       201     2019-01-26
因此,用户201正确地回答了第一个问题,然后又错误地回答了第一个问题。然后他们错误地回答了第二个问题,然后又答对了。最后,他们回答了问题3一次,结果是正确的

请注意,这些都在一个问题级别内。如果用户处于1级,我只会考虑选择1级问题。如果是2级,则只能选择2级问题

尽管他们正确地回答了所有1级问题,但最近他们只正确地回答了2次1级问题。因此,2将是我正在寻找的结果


是否有SQL查询可以执行此操作,或者我必须在编程中使用循环?

我当前没有SQL Server设置,因此我的答案可能有一些拼写错误。只有当这是该用户的最新答案时,才能正确回答您的问题

SELECT * 
FROM
    questions a INNER JOIN
    choices b on (a.question_id = b.question_id) INNER JOIN
    (   SELECT question_id, user_id, max(date_answered) as date_answered 
        FROM choices 
        GROUP BY question_id, user_id
    ) c
    on (b.question_id = c.question_id and b.user_id = c.user_id and b.date_answered = c.date_answered)
对最新问题的答复:

SELECT * 
FROM
    questions a INNER JOIN
    choices b on (a.id = b.question_id) INNER JOIN
    (   SELECT question_id, user_id, max(date_answered) as date_answered 
        FROM choices 
        GROUP BY question_id, user_id
    ) c INNER JOIN
    on (b.question_id = c.question_id and b.user_id = c.user_id and b.date_answered = c.date_answered) INNER JOIN
    users d on (d.id = b.user_id and d.level = a.level)

您使用的是哪个sql数据库,mysql、oracle、MSSQLetc@Tik这是使用FileMaker 17的SQL。它没有更高级数据库的所有功能,但我认为有一种方法可以做到这一点。哇,我印象深刻。我非常期待学习这一级别的SQL。你能把它移远一点吗?我没有明确提到,这只是针对特定级别的问题的选择。请看我编辑的问题中的注释。这有点棘手,但我会试一试。我希望这能很好地转化为FileMaker的SQL。