Не могу выбрать самый старший год SQL

D
На сайте с 28.06.2008
Offline
1114
202

Есть запрос вида

SELECT t3.year,t3.value,t1.id,t1.comments,t1.vote,t1.name,t1.okrug as rayon,t2.text as director
from cl6s3_firms_items as t1
INNER JOIN cl6s3_firms_fields_value as t2 on t2.item_id = t1.id
LEFT JOIN cl6s3_firms_exam as t3 on t3.item_id = t1.id
WHERE t1.category_id = 173
and t2.type_id = 2
and t1.comments < 2
GROUP by t1.id

В таблице cl6s3_firms_exam для условия t3.item_id = t1.id может быть несколько совпадений

и мне нужно либо max(t3.year) либо max(t3.id) (так как самый свежий год - t3.year будет иметь наибольший t3.id)

но добавить это в условие WHERE не получается, ругается на ошибку. Как быть?

Как взять самый свежий год?

P.S. данных в cl6s3_firms_exam может и не быть, поэтому left

---------- Добавлено 16.12.2019 в 10:33 ----------

Придумал такой способ

WHERE t1.category_id = 173
and t2.type_id = 2
and t1.comments < 2
and t3.year =(SELECT max(year) FROM `cl6s3_firm_exam` WHERE `item_id` = t1.id)
GROUP by t1.id

но тогда теряется смысл LEFT и в выборке будут только данные где есть результат из firm_exam

По другому никак?

---------- Добавлено 16.12.2019 в 10:45 ----------

Ну и уже по традиции отвечаю сам себе - условие оказывается можно поднять в join

LEFT JOIN cl6s3_firm_exam as t3 on (t3.item_id = t1.id and t3.year =(SELECT max(year) FROM `cl6s3_firm_exam` WHERE `item_id` = t1.id))

всем спасибо за внимание :))

C
На сайте с 04.02.2005
Offline
291
#1
t3.year =(SELECT max(year) FROM `cl6s3_firm_exam` WHERE `item_id` = t1.id)

Такая конструкция может не сработать на некоторых sql серверах, и ошибку не даст и верного результата (если у вас работает- хорошо)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий