2016-04-18 91 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 

(當然,除了說明目的,你當然應該選擇你需要的確切列)