Последняя запись SQL для каждого постороннего ключа - PullRequest
1 голос
/ 27 января 2009

У меня есть следующие 2 таблицы:

  • ингредиенты (идентификатор, имя)
  • ингредиент_цены (идентификатор, ингредиент_ид, цена, созданный_ат)

так, что один ингредиент может иметь много цен. Каков будет лучший способ получить последнюю введенную цену за ингредиент? Я знаю, что это легко сделать с помощью подвыборов, но я хочу знать, есть ли более эффективный способ сделать это.

1 Ответ

4 голосов
/ 27 января 2009

Я делаю это так:

SELECT i.*, p1.*
FROM ingredients i
 JOIN ingredient_prices p1 ON (i.id = p1.ingredient_id)
 LEFT OUTER JOIN ingredient_prices p2 ON (i.id = p2.ingredient_id 
   AND p1.created_at < p2.created_at)
WHERE p2.id IS NULL;

При этом выполняется поиск цены (p2), которая является более поздней, чем p1, и, если ничего не найдено, p1 должна быть самой последней ценой.

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

...