Выбор SQL, получить самую последнюю запись для каждого автомобиля - PullRequest
2 голосов
/ 19 ноября 2010

Моя база данных (MySql) имеет 2 таблицы

Таблица 1 - содержит записи для каждой машины

cars = id (int), reg (int), type (int)

Таблица 2 - содержит задания для каждого автомобиля

jobs = id (int), date (date)

Мне нужна команда SELECT, которая даст мне самую последнюю работу для всехID

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 19 ноября 2010

У вас нет общего поля, вы не можете это сделать. Вам необходимо хранить связанный car_id с каждым заданием или иметь таблицу jobs_to_cars.

Тогда вы бы использовали:

SELECT C.*, J.id, MAX(J.date)
FROM cars C 
INNER JOIN jobs J on J.car_id = C.id
GROUP BY C.id

Если идентификатор задания совпадает с идентификатором автомобиля, измените j.car_id на j.id, но тогда у вас не будет первичного ключа в Jobs, который я предлагаю вам начать.

2 голосов
/ 19 ноября 2010

Вы можете использовать что-то вроде этого

SELECT c.*, MAX(j.date) date
FROM cars c 
   LEFT JOIN jobs j ON j.id = c.id
GROUP BY c.id
ORDER BY c.id

, потому что у вас нет других полей в [jobs].Если у машины нет работы, дата будет NULL.

1 голос
/ 19 ноября 2010
    SELECT *
      FROM cars c
INNER JOIN (SELECT MAX(id) AS j_id
              FROM jobs
          GROUP BY car_id) x ON x.j_id = c.id
  1. Вы забыли поле jobs.car_id, в котором указано, к какому автомобилю относится работа
  2. Более элегантным способом будет создание поля car.last_job_id и сохранение его с триггером на jobs таблице.

Поскольку ваш вопрос неясен, этот запрос также может быть ответом:

    SELECT j.*
      FROM jobs j
INNER JOIN (SELECT MAX(id) id
              FROM jobs
          GROUP BY car_id) x ON x.id = j.id
0 голосов
/ 19 ноября 2010

Вы можете попробовать

ORDER BY date DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...