Как эффективно SQL выбирать новейшие записи из базы данных MySQL?

Possible Duplicate:
SQL Query to get latest price

У меня есть база данных, содержащая историю курсов акций. Я хочу выбрать самые последние цены для всех перечисленных акций. Я знаю, что в PostreSQL есть инструкция ОТЛИЧИТЬ НА, которая идеально подошла бы здесь.

Столбцы таблицы - name, closingPrice и date; name и date вместе образуют уникальный индекс.

Способ самый легкий (и очень неэффективный) -

SELECT * FROM stockPrices s
WHERE s.date =
(SELECT MAX(date) FROM stockPrices si WHERE si.name = s.name);

Гораздо лучший подход, который я нашел, -

SELECT *
FROM stockPrices s JOIN (
  SELECT name, MAX(date) AS date
  FROM stockPrices si
  GROUP BY name
) lastEntry ON s.name = lastEntry.name AND s.date = lastEntry.date;

Что было бы эффективным способом сделать это? Какие индексы мне создавать?

duplicate of:
SQL Query to get latest price

См. похожий пост

Galwegian 10.09.2008 13:14
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
1
29 124
1

Ответы 1

Я считаю, что ваш второй подход очень эффективен. В чем его проблема?

Вы должны добавить индексы к имени и дате.

Что ж, вам нужно добавить индекс, если этого требует производительность. Если это десять акций и годовые ежедневные данные, я бы не стал беспокоиться: MySQL относительно хорош в сканировании таблиц.

Mike Woodhouse 10.09.2008 13:36

Если бы у него было мало данных, он бы не стал просить об эффективном способе сделать это, не так ли? Достаточно даже первого, очевидного подхода.

Vinko Vrsalovic 10.09.2008 14:36

Другие вопросы по теме