Запрос SQL для рубинов на рельсах

Я блуждаю, если вы можете мне помочь. У меня есть этот запрос на SQL, и мне нужно сделать это в моем приложении rails. Эти запросы представляют один и тот же результат и работают хорошо.

SELECT DISTINCT ON (i.id) 
i.id, i.den_cont, c.date_expired 
FROM Items i 
JOIN Calibrations c ON c.item_id = i.id 
ORDER BY i.id, date_expired desc

а также

select codigo, numero, den_cont, date_expired 
from items 
join calibrations c 
on items.id = c.item_id 
inner join (select item_id, MAX(date_expired) as FECHA 
from calibrations 
group by item_id) as i2 
on c.item_id = i2.item_id and c.date_expired = i2.FECHA

У меня есть это, мне нужно изменить его, чтобы сделать выше.

@items = Item.joins(:calibrations).where('calibrations.date_expired <= ?', '2014/09/01')
1 ответ

Помогает ли что-то подобное?

Items.join(:calibrations)
 .where('calibrations.date_expired <= ?', '2014-09-01')
 .order('items.id')
 .group('items.id', 'items.den_cont')
 .select('items.id', 'items.den_cont', 'MAX(calibrations.date_expired)')

Я предполагаю, что items.id является первичным ключом, а затем вторым аргументом группы, так что вы можете выбрать столбец den_cont.

EDIT: Это также вариант,

Items.join(:calibrations)
 .where('calibrations.date_expired <= ?', '2014-09-01')
 .order('items.id')
 .order('calibrations.date_expired DESC')
 .select('DISTINCT ON (items.id) items.id, items.den_cont, calibrations.date_expired AS colaboration_expired')

licensed under cc by-sa 3.0 with attribution.