У меня есть таблица продуктов ...
альтернативный текст http://img357.imageshack.us/img357/6393/productscx5.gif
и таблица редакций, которая должна отслеживать изменения в информации о продукте
альтернативный текст http://img124.imageshack.us/img124/1139/revisionslz5.gif
Я пытаюсь запросить базу данных для всех продуктов с их последней редакцией ...
select * from `products` as `p` left join `revisions` as `r` on `r`.`product_id` = `p`.`product_id` group by `p`.`product_id` order by `r`.`modified` desc
но я всегда просто получаю первую ревизию. Мне нужно сделать это в один выбор (т.е. без подзапросов). Я могу управлять этим в mssql, это вообще возможно в mysql?
Вот как бы я это сделал:
SELECT p.*, r.* FROM products AS p JOIN revisions AS r USING (product_id) LEFT OUTER JOIN revisions AS r2 ON (r.product_id = r2.product_id AND r.modified < r2.modified) WHERE r2.revision_id IS NULL;
Другими словами: найдите ревизию, для которой не существует другой ревизии с тем же product_id и большим измененным значением.
Даты начала и окончания в вашей таблице истории сделают это возможным (оставляя самую последнюю дату окончания нулевой и ставят отметки даты окончания в предыдущей записи при вставке новой)
В противном случае вам придется использовать подзапрос.
Этот же запрос может быть обработан в MySQL.
Почему вы используете левое соединение вместо внутреннего соединения или правое соединение?
Также, если вы хотите по-другому, у вас есть функция МАКС.