背景:
编写一个连接到MS SQL DB的Ruby on Rails应用程序(不要问为什么,这是我无法解决的问题),数据库很安静,最多可以有2/3百万行。
目前有一个主要的列对我来说很重要,那就是'TimeUTC',表名为ApplicationLog,查询将在ApplicationLogController中。
问题:
我想写一个我可以在两个日期传递的查询,它会使用'TimeUTC'列按天分组所有记录,并总计这两天之间的所有记录。< / p>
我有SQL查询:
DECLARE @StartDate DateTime = '2014-01-04 00:00:00'
DECLARE @EndDate DateTime = '2014-02-04 23:59:59'
select (dateadd(DAY,0, datediff(day,0, TimeUtc))) as [DATE], count(*)
from applicationlog (nolock)
where TimeUtc between @StartDate and @EndDate
group by dateadd(DAY,0, datediff(day,0, TimeUtc))
order by [DATE] desc
我尝试从这样的事情开始:
@results = ApplicationLog.select((dateadd(DAY,0, datediff(day,0, TimeUtc)) as [date], count(*)).
group(dateadd(DAY,0, datediff(day,0, TimeUtc))).order(date desc)
现在我是一个新手,所以我可能离赛道太远了,这不好笑,但任何帮助都会很棒。我是否以正确的方式解决这个问题,还有更好的方法吗?
答案 0 :(得分:1)
尝试使用以下代码,该代码使用嵌入了一些SQL的Arel代码。
class ApplicationLog < ActiveRecord::Base
def self.between(range)
columns = Arel.sql('dateadd(DAY,0,datediff(day,0,TimeUtc)) as date, COUNT(*)')
conditions = arel_table['TimeUTC'].in(range)
query = arel_table.project(columns).where(conditions).group([1]).order('date desc')
ActiveRecord::Base.connection.execute(query.to_sql)
end
end
然后使用ApplicationLog.between(1.week.ago..Time.now)
。