ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ с условиями (где, по порядку)?

Я работаю над проектом Rails3 с базами данных MySql (локальная) и Postgresql (Heroku).
Мне нужно задать условия для ЛЕВОГО ВНЕШНЕГО СОЕДИНЕНИЯ, но я не знаю, как это сделать.

У меня есть 2 таблицы TRAININGS и TRAINING_HISTORIES.
Я хочу получить все записи TRAININGS и добавить последнюю действительную (также известную как завершенную) связанную запись TRAINING_HISTORIES.

table TRAININGS

id  name  order_by
5   A     1  
6   B     2  
7   C     3

table TRAINING_HISTORIES

id  training_id finished_at score
43  5           2011-06-06  10
44  5           null        null
45  6           2011-07-07  11
46  6           2011-08-08  14
47  6           null        null
48  6           2011-09-09  18
49  6           null        null
50  7           null        null
51  7           2011-10-10  19

Вот мой SQL-запрос:

SELECT tc.id, tc.name, tc.order, 
th.id as history_id, th.finished_at, th.score
FROM trainings tc
LEFT OUTER JOIN training_histories th ON th.training_id = tc.id
WHERE tc.id > 4
AND tc.id < 8
GROUP BY tc.id
ORDER BY tc.order_by ASC, tc.id ASC

ИМЕЮЩИЕСЯ РЕЗУЛЬТАТЫ:

id  name  order history_id  finished_at score
5   A     1     43          2011-06-06  10
6   B     2     45          2011-07-07  11
7   C     3     50          null        null
  • Запрос извлекает первую историю_обучения для каждого соединения

НЕОБХОДИМЫЕ РЕЗУЛЬТАТЫ:

id  name  order history_id  finished_at score
5   A     1     43          2011-06-06  10
6   B     2     48          2011-09-09  18
7   C     3     51          2011-10-10  19
  • В этом сценарии: извлечена последняя завершенная история_ обучения ...

Любые предложения действительно приветствуются !

Спасибо

РЕДАКТИРОВАТЬ: Если кто-то может ответить по части Rails, это тоже было бы здорово; -)
Как преобразовать запрос SQL в запрос Active Record Rails?

5
задан Community 23 May 2017 в 12:25
поделиться