0

使用活动记录,如何通过2列(created_at,视图)命令:如何通过created_at最后3天,订单记录,再由另一列,使用Rails [PostgreSQL的]

月1日:中创建的记录过去三天

第二:以后,一切都应该由意见

为了得到类似这样的结果只能订购(请无视日期语法):

[[2017-02-15 00:00:00 UTC, 150]], 
[2017-02-14 00:00:00 UTC, 88], 
[2017-02-13 00:00:00 UTC, 12]], 
[2016-01-14 00:00:00 UTC, 99999]], 
[2016-03-10 00:00:00 UTC, 3000]], 
[2016-11-07 00:00:00 UTC, 2000]], 
[2016-10-21 00:00:00 UTC, 1000]], 
[2016-09-03 00:00:00 UTC, 100]], 
[2016-05-18 00:00:00 UTC, 10]] 

我在Postgresql中发现了“date_trunc”,但我只需要最后3天一次,然后只考虑视图的数量。

我有哪些选项,理想情况下只使用一个查询?

谢谢

回答

0

您可以在当前日期和当前日期之间创建日期 - 3天。在这里,您将获得最近3天创建的所有记录。

current_date = Time.zone.now 
before_date = current_date - 3.days 

Ex: where(:created_at => before_date.beginning_of_day.. current_date.end_of_day).order(created_at ASC, views DESC) 
+0

谢谢,但只显示过去3天。所有记录都需要显示,并在最后3天内创建。 – Simon

2

这里是一个答案,可能不是一个单一的查询。但是,它满足您的要求。

我以User模型为例。

首先,获取创建日期在过去3天内的用户。

users = User.where(:created_at => (Date.today - 3.days)..Date.today)

现在,得到它的创建日期是不是在过去3天的用户,以便通过意见DESC

users2 = (User.where.not(:created_at => (Date.today - 3.days)..Date.today)).order('views desc') 

现在,使用(+)

两个结果相结合

Rails活动记录对象可以使用进行合并

users3 = users + users2给出您的结果。

+0

谢谢Sravan,这工作。尽管如此,我仍然在寻找单一的查询解决方案。 – Simon

+0

是的,我也会继续尝试。如果您觉得它有用,您可以接受它。 – Sravan

+0

我upvoted它作为有用的,谢谢:-) – Simon