我有一个对象和一个结果表
结果有一个名为kg
的列。
我需要获取每个object
kg
数据
where('DATE(created_at) = ?' Date.today AND Date.today - 1.day AND Date.today - 1.week AND Date.today - 1.month)
所以我的问题是,这是我最好的选择:
获取1个月的所有记录(日期在今天和今天之间 - 1.月),然后得到今天,昨天,1周前和1个月前的结果)
today = result.where("DATE(created_at) BETWEEN ? AND ?", Date.today - 1.month, Date.today)
或者进行4次查询并获取每个日期的数据?
today = result.where('DATE(created_at) = ?' Date.today)
y = result.where('DATE(created_at) = ?' Date.today - 1.day)
w = result.where('DATE(created_at) = ?' Date.today - 1.week)
m = result.where('DATE(created_at) = ?' Date.today - 1.month)
答案 0 :(得分:1)
您应该能够构建IN
请求。
result.where('DATE(created_at) IN (?)', [Date.today, Date.today - 1.day])
将检索提供日期之间的记录。
答案 1 :(得分:1)
根据您希望以后使用结果的方式,使用第二种方法单独查询它们可能是有意义的。这样,您就不必在结果集中进一步分离它们。
如果您实际上不需要在第一种方法中查询的数据,则从数据库中检索它们是没有意义的。然后,您应该使用另一种更具体的方法。
如果您的实际查询比问题中显示的查询更复杂,或者您只想要一个结果集,那么使用以下只需要一个查询的方法可能是有意义的:
dates = [
Date.today,
Date.today - 1.day,
Date.today - 1.week,
Date.today - 1.month
]
resultset = Result.where('DATE(created_at) IN (?)', dates)
此查询将导致类似于此的SQL查询:
SELECT * from results WHERE DATE(created_at) IN ('2013-12-16', '2013-12-15', '2013-12-09', '2013-11-16');