更好的方法找到第二大元素在轨道上的红宝石激活记录查询
问题描述:
我正在使用此查询来查找第二大元素。我正在查询value
列。更好的方法找到第二大元素在轨道上的红宝石激活记录查询
Booking.where("value < ?", Booking.maximum(:value)).last
有没有比这更好的查询?或者这个的其他选择。
PS - value
并不是唯一的。可能有两个元素具有相同的值
答
这应该工作。
Booking.select("DISTINCT value").order('value DESC').offset(1).limit(1)
将产生此查询:
SELECT DISTINCT value FROM "bookings" ORDER BY value DESC LIMIT 1 OFFSET 1
答
您可以使用offset
和last
:
Booking.order(:value).offset(1).last
将产生下面的SQL语句:
SELECT `bookings`.* FROM `bookings`
ORDER BY `bookings`.`value` DESC
LIMIT 1 OFFSET 1
这也将工作: 'Booking.select(“DISTINCT value”)。order(“value DESC OFFSET 1 LIMIT 1”)' –