2017-07-03 53 views
-1

我有個問題。比方說我有兩個表,一個是sol_items另一個是sol_informations。 現在sol_itemssol_informations表中有很多關聯的記錄。 我想使用單個查詢獲取每個'sol_items'的最新sol_informations關聯記錄。如何在postgresql中寫一個複雜的查詢

所以我們假設我在sol_items表中有3條記錄,這些記錄中的每條記錄都有sol_informations中的3個關聯記錄。 現在我想要得到與sol_informations關聯的每個sol_items的sol_informationstable的最新記錄。

我曾嘗試下面

select * from solbox_informations where(sol_item_id in (1,2,3)) LIMIT 1 

但是,這只是一個返回紀錄爲sol_items表的第一個元素。 您無法增加LIMIT值。

有人可以幫助我與正確的查詢。

sol_items表列

id, name 

sol_informaitons表列

id, name, amount, sol_item_id 
+0

您正在尋找我認爲的加入。請透露表結構 –

回答

1

您將需要一個子查詢。

SolInformaiton.where(id: SolInformaiton.group(:sol_item_id).maximum(:id).values) 

說明:

ids = SolInformaiton.group(:sol_item_id).maximum(:id).values 

意願組從每個組具有ID(最新)的最大值在SolInformaiton所有記錄通過sol_item_id並選擇1記錄。它將返回ActiveSupport::OrderedHash,其中sole_item_id爲關鍵字,id爲值,因此.values將返回所需ID的數組。

SolInformaiton.where(id: ids) 

這是一個簡單的查詢,它將返回數組中的id記錄。

+0

你能解釋一下這個查詢嗎? – monsur

+0

檢查更新回答 –

+0

謝謝你對這個答案的解釋很好。我已經接受你的回答。 – monsur