Sql 如何使用一系列时间来选择DataMapper条目?

Sql 如何使用一系列时间来选择DataMapper条目?,sql,ruby,datamapper,Sql,Ruby,Datamapper,我有一个基于DataMapper的SQLite数据库。我将构建模型所依据的数据的时间存储为Msrun.rawtime或模型Msrun的属性:rawtime,DateTime 我需要能够做的是在过滤器中选择一个日期/时间范围,然后根据该时间过滤器对DataMapper条目进行排序。像这样: Msrun.all.size # => 63 matches = Msrun.all( begintime: 2010-11-03T21:33:00-0600, endtime: 2011-04-09T2

我有一个基于DataMapper的SQLite数据库。我将构建模型所依据的数据的时间存储为
Msrun.rawtime
或模型
Msrun
属性:rawtime,DateTime

我需要能够做的是在过滤器中选择一个日期/时间范围,然后根据该时间过滤器对DataMapper条目进行排序。像这样:

Msrun.all.size # => 63
matches = Msrun.all( begintime: 2010-11-03T21:33:00-0600, endtime: 2011-04-09T23:59:59-0600 )
matches.size # => 12

由于我的数据库在这个模型和子模型之间有大约500个属性,并且我希望每月生成大约100个这样的条目,所以我也想要一些非常快的东西。这需要SQL吗?这可能吗?我是否让这变得比应该的更难/是否有更简单的方法来配置我的数据以启用这种类型的排序?

我不确定您想做什么?如果要查询在特定开始时间和结束时间之间发生的项目,可以使用:

Mrsun.all(:rawtime => start_time..end_time)
这将生成类似以下内容的SQL

SELECT ... FROM msruns WHERE rawtime > start_time AND rawtime < end_time;

虽然这种语法是有意义的,我很欣赏,但对于具有DataMapper DateTime属性值的东西,这种语法不起作用。对和那个班合作有什么建议吗?太好了。我知道这种比较是行不通的,但我不知道如何做到这一点。谢谢
require 'rubygems'
require 'dm-core'
require 'dm-migrations'


# setup the logger
DataMapper::Logger.new($stdout, :debug)

# connect to the DB
DataMapper.setup(:default, 'sqlite3::memory:')

class Msrun
  include DataMapper::Resource

  # properties
  property :id, Serial
  property :rawtime, DateTime

end

DataMapper.finalize.auto_migrate!


10.times do |n|
  Msrun.create(:rawtime => DateTime.new(2011, 1, 1, 0, 0 , n))
end

p Msrun.all(:rawtime => DateTime.parse('2011-1-1T00:00:04+0100')..DateTime.parse('2011-1-1T00:00:07+0100'))