2012-09-11 60 views
0

我擁有名稱,位置,created_at作爲表中重要字段的用戶。 我想檢索每個用戶的最新位置,即,我想是這樣的:在導軌中獲取每個用戶標識的最新記錄3.2

username location  created_at 
abc   New York  2012-08-18 16:18:57 
xyz   Mexico city 2012-08-18 16:18:57 
abc   Atlanta  2012-08-11 16:18:57 

只輸入UID(1,2)userids.please的陣列幫我完成this.I只是想知道如何使用活動記錄查詢接口來編寫查詢。

+0

按'最新'我的意思是最大的created_at值 – usercr

+0

您使用的是什麼dbms?你的目標是什麼?獲取數據或避免模型代碼中的任何SQL? –

+0

我正在使用mysql,並希望它獨立於數據庫 – usercr

回答

2

通常,這應該是解決此類問題的標準方式:

SELECT l1.user, l1.location 
FROM locations l1 
LEFT JOIN locations l2 ON l1.user = l2.user AND l2.created_at > l1.created_at 
WHERE l2.id IS NULL 

的想法是將自己與表連接起來,並找到那些沒有任何行的行,其行號相同user更大created_at

當然,你應該在你的餐桌上有(user, created_at)索引。

現在你應該看看在AR界面中如何表現。

+0

只是好奇'WHERE l2.id IS NULL'的目的是什麼? – Salil

+0

沒有它你會有一堆記錄,其中'l2.created_at'確實大於'l1.created_at'。這樣,我們在這裏只留下最大'l1.created_at'(對於用戶)的記錄。 –

+0

ohk Thanks @ ton @MladenJablanović – Salil

0

u_id 

是用戶ID的陣列,然後

u_id.map{|i| User.find(i).location} 

應該是用戶位置陣列。

0

可以使用

User.where(:uid => [1,2,3]).maximum('location') 

,這將創造類似

SELECT MAX(`users`.`location`) AS max_id FROM `users` WHERE `users`.`id` IN (1, 2,3) 
相關問題