一个Userhas_many Posts。我想检索每天的最新帖子(使用created_at),而忽略其他可能早些写的帖子。提出此问题的另一种方法可能是按部门要求每个最高薪水收入的雇员- 我认为也是一样。
User
Posts
created_at
如何在Rails(最好是4.0)中编写此查询?我认为这与它有关group,maximum但我似乎无法理解。有没有办法不用SQL来做到这一点?
group
maximum
为了明确起见,我想返回的是一系列post对象,它们是在各自日期上最后写入的对象。
谢谢!
它不是很干净,但是可以在Rails 3(在我的例子中是从Book模型中获取)中使用PostgreSQL语法来将created_at截断为日期:
max_created_at_list = Book.select("max(created_at) as created_at").group("date_trunc('day',created_at)") last_books = Book.where(:created_at => max_created_at_list)
… 要不就:
Book.where(:created_at =>Book.select("max(created_at) as created_at").group("date_trunc('day',created_at)"))
您希望为大型数据集在created_at上建立一个索引,并且在数据库级别上将created_at限制为不为null,或者如果您使用的RDBMS不对null进行索引,则使用“ is not null”谓词(例如Oracle)