ActiveRecord与日期相关的查询; MySQL与PostgreSQL的比较
问题描述:
我有一个记录数据库,我想选择最近几天的天数,然后按天计算每天获得这些记录的计数。如果我是手工编写的MySQL查询,我喜欢的东西开始:ActiveRecord与日期相关的查询; MySQL与PostgreSQL的比较
SELECT COUNT(id) AS count, DAY(created_at) AS the_day
FROM `results`
GROUP BY the_day
如何使用ActiveRecord
抽象这个查询,以便它适用于PostgreSQL的呢?所以,到目前为止,我已经有了一个范围来选择上面这个查询,但我还不能肯定这将与PostgreSQL的工作:
scope :recent, lambda {
select(['id', 'COUNT(id) AS the_count', 'DAY(created_at) AS the_day'])
.where(:created_at => 7.days.ago.utc...Time.now.utc)
.order('the_day DESC')
.group('the_day')
}
答
SQL规范提供了一种提取方法是DB-无关:EXTRACT(<unit> FROM <date>)
这可能适用于大多数环境,但是,如果您使用Sqlite3进行测试,那么看起来它不知道如何处理'''EXTRACT'''。 –