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


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