mysql - SQL 查询建议每个用户的下一个测验

标签 mysql sql

我有两张 table 。

quiz table 
=================
id, q_name, code


completed_quizes table
======================================================
id, completion_date, user_id, quiz_code, quiz_count

我有两种类型的测验

Table_name: quiz_names
id     q_name              code
1      grand_quiz          gra
2      normal_quiz         nor

Table_name: completed_quizes
id    completion_date         user_id      q_code   q_count
1     1340841600 (28June2012)    2          gra       0
2     1340755200(27June2012)     2          nor       3
3     1340668800(26June2012)     2          nor       2
4     1340582400(25June2012)     2          nor       1
5     1340496000(24June2012)     2          gra       0
6     1340841600 (28June2012)    3          gra       0
7     1340755200(27June2012)     3          nor       3
8     1340668800(26June2012)     3          nor       2
9     1340582400(25June2012)     3          nor       1
10    1340496000(24June2012)     3          gra       0

规则:

1- 首先将对所有用户进行大测验。

2-基于大测验,如果任何用户上次测验是大测验,那么下一个建议将是普通测验1。

3-基于正常测验1,如果任何用户上次测验是正常测验1,那么下一个建议将是正常测验2。

4-基于普通测验2,如果任何用户上次测验是普通测验2,那么下一个建议将是普通测验3。

5-如果任何用户上一次测验是正常测验 3,那么下一个建议将再次是大测验。

附注

问题是每个用户的下一个建议都是基于他之前完成的测验。我想要所有用户谁将是下一个测验?

请问有什么建议吗?

最佳答案

您需要groupwise maximum要获取每个用户执行的最新测验,然后添加 1(使用 MOD 将最近参加测验 3 的用户旋转回 0)。要包含尚未参加任何测验的用户,您需要创建 outer join与您的用户表:

SELECT user_id, IFNULL((q_count+1) % 4, 0) AS next
FROM   users LEFT JOIN (
  completed_quizes NATURAL JOIN (
    SELECT   user_id, MAX(completion_date) AS completion_date
    FROM     completed_quizes
    GROUP BY user_id
  ) AS t
) USING (user_id)

查看 sqlfiddle .

关于mysql - SQL 查询建议每个用户的下一个测验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241590/

相关文章:

mysql - MariaDB Galera Cluster Node 频繁访问磁盘导致性能大幅下降

java - 当您单击 HTML 中的 <button>/&lt;input&gt; 时,到底会发生什么?

mysql - 查询选择日期时间之外的时间范围

SQL:从两个表中选择类似列

WHERE in 子句的 Mysql 问题

SQL Server 2008 字段函数 - 根据其他两个字段之间的关系返回 'ok' 或 'no'

php - 通过 php 在 Maria db 上以 swe7 格式插入数据

php - 从月份和年份创建一个 mysql 日期

mysql - 如何通过标签搜索数十亿个项目(寻找最佳架构)?

mysql - 按具有最大列的查询进行分组