2016-04-18 60 views
0

我需要构建一个连接,它会给我最新的价格为每个产品。为了示例的目的,我极大地简化了表结构,并且每个表行数都将以数百万计。我以前的刺伤并不是非常有效。postgres加入最大日期

products

prices

+1

http://meta.stackoverflow.com/questions/285551/why-may-i- not-upload-images-of-code-on-so-when-asking-question/285557#285557 –

+0

问题是由于您在编写查询时遇到问题以获得正确结果吗?或者,您在以有效的方式编写查询时遇到问题? –

+0

@MarkHildreth只要数据集很小,我就可以整天写“运行”查询。一旦我尝试在我的大型数据库上运行这些相同的子查询连接,它永远不会返回结果。所以是的,这个问题肯定是有效的。 – bopritchard

回答

0

它使用的是row_number功能做的最简单的方法。

select p.name,t.amount as latest_price 
from (select p.*, row_number() over(partition by product_id order by create_date desc) as rn 
     from prices p) t 
join products p on p.id = t.product_id 
where rn = 1 
0

在PostgreSQL,你可以尝试DISTINCT ON只得到每个产品ID的第一行按降序create_date秩序;

SELECT DISTINCT ON (products.id) products.*, prices.* 
FROM products 
JOIN prices 
    ON products.id = prices.product_id 
ORDER BY products.id, create_date DESC 

(当然,除了说明目的,你当然应该选择你需要的确切列)