我有一个关于汽车和停车票的系统。我要求实施我必须获得过去12个月所有门票的地方,所以我打开了this question。
要求已经改变,现在我需要从最后一张票的日期开始过去12个月的门票。
我知道如何使用SQL(postgres)来做到这一点,它就像这个例子:
select *
from parking_tickets
where car_id = 25
AND
date > (select date from parking_tickets where car_id = 25 order by date desc limit 1) - INTERVAL '12 months'
order by date desc
但我宁愿在ActiveRecord中使用它。有什么办法吗?
我可以在where子句中插入子查询本身,但它不会像我想的那样好。
有没有一种很好的方法可以做到这一点,就像这样?
@cars = Car.includes(:parkingTickets)
.where('parkingTickets.date >= ?', MAX(parkingTickets.date) - 12.months)
.order('ID, parkingTickets.date desc')
我想在汽车列表中完成它,因此在查询之前进行查询然后在查询中插入此值将不是一个优雅的解决方案,因为我会有一个数组。
答案 0 :(得分:2)
此解决方案应该有效:
Car.includes(:parking_tickets).where(id: 25, parking_tickets: {date: (ParkingTicket.where(car_id: 25).order(date: :desc).first.date - 12.month)..ParkingTicket.where(car_id: 25).order(date: :desc).first.date}).first.parking_tickets.order(date: :asc).all