需要从表中检索用户的最新实例

时间:2011-01-01 00:44:11

标签: sql mysql join

这是我手边的两张表,

挑战

id |名称

Challenges_Users

user_id | challenge_id | started_at | completed_at

challenge_users表中的每个实例都是用户接受质询及其状态的记录(基于started_at和completed_at时间戳的状态)

此外,用户可以多次接受挑战(不同时,但可以在第一个实例完成后再次接受)。因此,对于单一挑战,该表可能看起来像这样。

id | challenge_id | started_at |的 completed_at

2831 | 4 | 2010-12-23 00:00:00 | 2010-12-29 15:42:41

2834 | 4 | 2010-12-29 15:46:53 | NULL

现在,我需要从challenge_users表中检索挑战表中所有挑战的列表及其最新实例的状态。

国家是: 如果challenge_users table =>中没有挑战的实例未开始 如果completed_at为null并且started_at不为null =>进行中 如果completed_at不为null并且started_at不为null =>完成

我有两个问题:

  1. 如何进行简单的连接,以便在challeges_users中对特定user_id没有任何实例的所有挑战也包含在结果集中。

  2. 如何返回结果集,使其只有最新的begin_at记录。

  3. 非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

如果我明白你要做什么,这是向正确方向迈出的一步(未经测试):

SELECT C.ID, C.NAME, CU.USER_ID, CU.STARTED_AT
FROM CHALLENGES AS C 
LEFT JOIN CHALLENGES_USERS AS CU
ON CU.CHALLENGE_ID=C.ID 
  AND CU.STARTED_AT=(
    SELECT MAX(CU2.STARTED_AT) 
    FROM CHALLENGES_USER CU2 
    WHERE CU2.CHALLENGE_ID=C.CHALLENGE_ID) 
相关问题