MySQL - LEFT JOIN самая последняя запись, основанная на столбце datetime

0

Я пытаюсь ЛЮБИТЬ ПРИСОЕДИНИТЬ к последней связанной записи, основанной на столбце 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
)
  • 0
    показать нам пример данных и ожидаемых результатов
Теги:
join

4 ответа

0

Правильный способ сделать это будет использовать два объединения, а не одно:

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;
  • 0
    Что произойдет в этом случае, когда есть две работы с одинаковым заказом и датой отправки?
  • 0
    Вы получите оба в наборе результатов.
0

Попробуй это:

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
)
0

попробуйте этот запрос

    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
0

Как насчет этого?

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

Запрос выведет каждый из заказов и его самую последнюю работу. Если у него нет работы, то заполненные и рабочие столбцы будут закрыты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню