我的数据库中有一个位置表,其中包含我系统所有用户的位置数据。
表格设计类似于
id| user_id| longitude| latitude| created_at|
我有一组用户。现在我想选择所有这些用户的最新(按创建时间排序)位置。
我能够找出相同的
的sql查询SELECT * FROM my_table
WHERE (user_id , created_at) IN (
SELECT user_id, MAX(created_at)
FROM my_table
GROUP BY user_id
)
AND user_id IN ('user1', 'user2', ... );
现在,当我在Ruby On Rails中工作时,我想将此sql查询写入activerecord rails。有人可以帮我这个吗?
答案 0 :(得分:1)
我认为这会给出正确的结果:
for (int i = 0; i < bricksList.size(); i++) {
BufferedImage image;
try {
image = ImageIO.read(new File(bricksList.get(i).img));
g.drawImage(image, bricksList.get(i).x, bricksList.get(i).y, null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
如果要生成完全相同的查询,可以执行此操作:
MyModel.order(created_at: :desc).group(:user_id).distinct(:user_id)
我认为子查询可能无法很好地扩展到大型数据集,但我知道如果您只想将其转换为rails并稍后进行优化。
答案 1 :(得分:0)
如何添加范围,并以稍微不同的方式获得相同的结果:
class UserLocation
def self.latest_per_user
where("user_locations.created_at = (select Max(ul2.created_at) from user_locations ul2 where ul2.user_id = user_locations.user_id)")
end
end
然后你只需使用:
UserLocation.latest_per_user.where(:user_id => ['user1', 'user2'])
...获取所需的数据集。