这是我手边的两张表,
挑战
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 =>完成
我有两个问题:
如何进行简单的连接,以便在challeges_users中对特定user_id没有任何实例的所有挑战也包含在结果集中。
如何返回结果集,使其只有最新的begin_at记录。
非常感谢任何帮助。谢谢!
答案 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)