我有一个包含股票价格历史的数据库。我想为每个列出的股票选择最近的价格。我知道PostreSQL有一个DISTINCT ON语句,非常适合这里。
表格列为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;
这样做的有效方法是什么?我应该创建哪些索引?