2016-01-19 103 views
1

是否可以查詢模型對象並通過一個或多個列過濾結果以獲得唯一性?獲取所有爲一個屬性過濾得到唯一性的活動記錄對象

我應該限定此,採取第一個獨特的記錄,並忽略其餘的罰款。

我通常的方法是查詢對象並採集uniq id或其他任何並運行另一個查詢。

可以說,我有一組這樣的:

測試編號:24997,爲test_id:7,GROUP_ID:5408,

測試編號:25001,爲test_id:7,GROUP_ID:5412,

測試編號:25002,爲test_id:8,GROUP_ID:5413,

測試編號:25004,爲test_id:8,GROUP_ID:5415,

維護設備牛逼ID:25007,爲test_id:9,GROUP_ID:5417,

測試編號:25008,爲test_id:9,GROUP_ID:5299

我想有這樣的結果。獨特由爲test_id柱:

測試編號:24997,爲test_id:7,GROUP_ID:5408,

測試編號:25002,爲test_id:8,GROUP_ID:5413,

測試ID:25007 ,test_id:9,group_id:5417

我想是否完整。假設這是一個包含多列的直通表。我怎麼能得到兩列或更多列的唯一記錄?

+0

我有點困惑,你是否想要獲得給定列的值在所有其他行中唯一的所有對象? –

+0

我更新了這個問題:) – isea

回答

1

是的。您可以使用distinct根據列上的唯一性過濾結果。

考慮你有一個Post模型title列,你必須得到由標題的唯一記錄,那麼你會怎麼做

Post.select('DISTINCT title') 

編輯:上面的查詢只會返回標題欄,但如果你想要所有需要循環並過濾的列。基本上,如果您在一列上執行唯一性並且有重複項,則無法決定保留哪一個以及哪一個丟棄。

+0

這將轉換爲'選擇不同標題FROM Post'。OP正在詢問一組記錄 – Rahul

+0

我編輯了我的答案。 OP要求的解決方案並不簡單。 – avinoth

2

您可以在ID使用minimum

Test.group(:test_id).minimum(:id) 

這將返回一個哈希值與一組鍵和一個ID值,您可以傳遞給where條件的範圍:

Test.where(id: (Test.group(:test_id).minimum(:id).values)) 
+0

這是一個很棒的伎倆! –

相關問題