【问题标题】:Need to retrieve latest instances of a user from a table需要从表中检索用户的最新实例
【发布时间】:2011-01-01 00:44:11
【问题描述】:

这是我手头的两张桌子,

挑战

标识 |名字

挑战用户

user_id |挑战ID |开始时间 |完成时间

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 |空

现在,我需要从 Challenges 表中检索所有挑战的列表,以及从 Challenge_users 表中获取最新实例的状态。

状态是: 如果 Challenge_users 表中没有挑战实例 => 未启动 如果 completed_at 为 null 且 started_at 不为 null => 正在进行 如果completed_at 不为null 并且started_at 不为null => 完成

我有两个问题:

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

  2. 如何返回结果集,使其仅包含最新开始时间的记录。

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

【问题讨论】:

  • 三个状态中的哪一个应该包含在结果集中?

标签: sql mysql join


【解决方案1】:

这是朝着正确方向迈出的一步(未经测试),如果我了解您要做什么:

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) 

【讨论】:

  • 工作就像一个魅力!非常感谢您对延迟回复感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 2013-11-07
相关资源
最近更新 更多