Необходимо получить последние экземпляры пользователя из таблицы - PullRequest
2 голосов
/ 01 января 2011

Это две таблицы, которые у меня под рукой,

Вызовы

id | Имя

Challenges_Users

user_id | challenge_id | start_at | completed_at

каждый экземпляр в таблице challenge_users - это запись о том, что пользователь принял вызов, и его состояние (состояние основано на отметках времени start_at и complete_at)

Кроме того, пользователь может принять вызов несколько раз (не одновременно, но может принять его снова после завершения первого экземпляра). Таким образом, таблица может выглядеть так для одной задачи.

id | challenge_id | start_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 нет экземпляра для вызова => unstarted если завершено-ноль равно нулю, а началось-ноль не равно нулю => выполняется если complete_at не равен NULL и start_at не равен NULL => завершено

У меня 2 проблемы:

  1. Как сделать простое объединение, чтобы все вызовы, для которых нет конкретного экземпляра user_id в challeges_users, также включались в набор результатов.

  2. Как вернуть результирующий набор так, чтобы в нем была только запись с последним начальным_татом.

Любая помощь очень ценится. Спасибо!

1 Ответ

2 голосов
/ 01 января 2011

Вот шаг в правильном направлении (без проверки), если я понял, что вы пытаетесь сделать:

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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...