2011-11-28 73 views
2

我有一个记录数据库,我想选择最近几天的天数,然后按天计算每天获得这些记录的计数。如果我是手工编写的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') 
    } 

回答

2

SQL规范提供了一种提取方法是DB-无关:EXTRACT(<unit> FROM <date>)

+0

这可能适用于大多数环境,但是,如果您使用Sqlite3进行测试,那么看起来它不知道如何处理'''EXTRACT'''。 –