Похоже, что вы присоединяетесь к наименьшей комбинации каждого члена с соответствующим максимальным значением pr_dato для данной даты.Я бы потянул ЭТО в позицию ПЕРВОГО запроса вместо того, чтобы быть похороненным, а затем снова присоединить его к остальным ...
select STRAIGHT_JOIN
ju.id,
ju.name,
fst.statustype,
takst
from
( SELECT
members,
MAX(pr_dato) AS MaxDate
FROM
fab_status_members
WHERE
pr_dato <= '2011-07-01'
GROUP BY
members ) MaxDatePerMember
JOIN jos_users ju
on MaxDatePerMember.members = ju.ID
JOIN fab_status_members fsm
on MaxDatePerMember.members = fsm.members
AND MaxDatePerMember.MaxDate = fsm.pr_dato
JOIN fab_status_type fst
on fsm.statustype = fst.id
JOIN fab_quota as fq
on fst.statusType = fq.quotaType
Я ДУМАЮ, что у меня есть все, что вы хотите, и позвольте мне повторить простымслова, что я думаю, что вы хотите.Каждый участник может иметь несколько записей статуса (через Fab_Status_Members).Вы ищете всех участников и их статус НАИБОЛЕЕ ПОСЛЕДНИЙ на определенную дату.Это первый запрос.
Исходя из того, что бы пользователи ни подходили, я присоединяюсь к таблице пользователей, чтобы получить информацию об их имени (первое объединение).
Теперь вернемся к сложной части.,Начиная с первого запроса, который определил самую последнюю активность состояния даты, повторно присоединитесь к той же таблице (fab_status_members) и получите фактический код состояния SPECIFIC до последней даты состояния для этого участника (второе присоединение).
Из результата получения правильного STATUS для каждого члена в максимальную дату, вам нужно получить ТИП статуса, который представляет код (третье соединение с fab_status_type).
И, наконец, из знания fab_status_type, каковотип квоты.
Группа не требуется, так как первый запрос группируется по идентификатору участника и возвращает одну запись на человека (ЕСЛИ ... возможно иметь несколько типов состояния в одном и том же).день в таблице fab_status_members ... если это не полное поле даты / времени, то все в порядке)
Не уверен в столбце "takst", из какой таблицы идет таблица, но я пытаюсь полностью определитьимена таблиц (или псевдонимов), из которых они исходят, я думаю, это происходит из таблицы QuotaType.
... РЕДАКТИРОВАТЬ из комментария ...
Извините, да, FQ за последнее присоединение.Что касается того, что он не возвращает никаких строк, я бы попробовал их по одной за раз и посмотрел, где разрыв ... Я бы начал по одной за раз ... сколько из запроса maxdate, затем добавил бы соединение для пользователей, чтобы сделатьверный счетчик записей вернул.Затем добавьте FSM (повторное присоединение) для конкретного действия участника / даты, ТО в тип статуса ... где-то в цепочке его нет, и единственное, о чем я могу подумать, - это пропустить тип статуса как статус любого участника.должен был бы быть связан с одним из пользователей, и он должен найти себя, поскольку именно отсюда произошла максимальная дата.Я угадываю его где-нибудь на присоединение к типу статуса или квоты.