Я пытаюсь ЛЮБИТЬ ПРИСОЕДИНИТЬ к последней связанной записи, основанной на столбце DATETIME в связанной таблице.
Самая последняя запись не самая последняя, вставленная; столбец даты обновляется регулярно, и именно на этом я хочу присоединиться.
Я не смог сделать это, используя вспомогательный запрос в соединении, потому что возвращенный job_id
не соответствует самой последней submitted
дате.
SELECT o.id, j.submitted, j.id AS job_id
FROM orders o
LEFT JOIN (
SELECT id, order_id, MAX(submitted) AS submitted
FROM jobs
GROUP BY order_id
) j ON j.order_id = o.id
Я также пробовал с подзапросом в предложении WHERE, но это фильтрует результат так, чтобы возвращались только orders
с job
. Мне нужны orders
без каких-либо jobs
в составе набора результатов.
SELECT o.id, j.submitted, j.id AS job_id
FROM orders o
LEFT JOIN jobs j ON j.order_id = o.id
WHERE j.submitted = (
SELECT MIN(submitted)
FROM jobs
WHERE order_id = o.id
)
Правильный способ сделать это будет использовать два объединения, а не одно:
select . . .
from orders o left join
jobs j
on o.id = j.order_id left join
(select j2.order_id, max(j2.submitted) as max_submitted
from jobs j2
group by j2.order_id
) j2
on j2.order_id = j.order_id and j2.max_submitted = j.max_submitted;
Попробуй это:
SELECT o.id, j.submitted, j.id AS job_id
FROM orders o
LEFT JOIN jobs j ON j.order_id = o.id
WHERE j.submitted = (
SELECT MAX(submitted) FROM jobs
)
попробуйте этот запрос
SELECT
o.id AS orderId, recentOrderInner.*
FROM
orders o
LEFT JOIN
(SELECT
j.order_id, j.submitted AS recent_order
FROM
job j
LEFT JOIN job j_l ON (j.order_id = j_l.order_id
AND j.submitted < j_l.submitted)
WHERE
j_l.submitted IS NULL
ORDER BY aul.created DESC) AS recentOrderInner ON o.id = recentOrderInner.order_id
Как насчет этого?
SELECT o.id, max(j.submitted), j.id AS job_id
FROM orders o
LEFT JOIN jobs j on (j.order_id = o.id)
GROUP BY o.id, j.id
ORDER BY o.id
Запрос выведет каждый из заказов и его самую последнюю работу. Если у него нет работы, то заполненные и рабочие столбцы будут закрыты.