MySQL сложный запрос JOIN

302
24 января 2018, 13:20

Уважаемые, небольшой ступор как сделать запрос. Есть две таблицы, в одной данные для каждого объекта, а во второй его состояние(id, время когда было изменение). Требуется сделать выборку чтобы получить список всех объектов и их последнее изменение, то есть вывести все объекты и если изменение в выбранной дате было то записать это время, если изменения не было(нет соответствующей записи таблицы) то записать NULL. Как составить запрос? Пробовал таким запросом но условие неправильное немного. По разному пробовал либо не полностью возвращает либо ничего.

SELECT `objects`.`id`, `objects`.`weight`, `objects`.`price`,
       `objects`.`status`, MAX(status.changeStatusTime)
  FROM `objects` 
    LEFT JOIN `status` ON `status`.`id_obj` = `objects`.`id`
  WHERE DATE(status.changeStatusTime) = '2017-02-05'
  GROUP BY `objects`.`id`

Answer 1

Если правильно угадал со смыслом вопроса, то как-то так:

SELECT o.id, o.weight, o.price, o.status, s.ts
  FROM `objects` AS o
    LEFT JOIN ( SELECT id_obj, MAX(changeStatusTime) AS ts
                  FROM `status`
                  WHERE DATE(status.changeStatusTime) = '2017-02-05'
                  GROUP BY id_obj
              ) AS s ON s.id_obj = o.id
READ ALSO
Ограничить JOIN одной строкой

Ограничить JOIN одной строкой

Есть таблица MySQL с заказами и timestamp и id этих заказов, а есть таблица с обработкой заказов, но обработок может быть несколькосвязка по id заказа

294
Как составить такой вот sql запрос?

Как составить такой вот sql запрос?

Вот моя карта умаНа ней видно что поля таблицы Match team_one и team_two обращаются к таблице Team по полю id, т

237
Первый раз встречающиеся по дате

Первый раз встречающиеся по дате

Есть табличка состоящая из колонок id, date, statusid повторяются

228