在 rails 活动记录查询中找到 ruby 中第二大元素的更好方法

Better method to find the second largest element in ruby on rails active record query

我正在使用此查询查找第二大元素。我正在查询 value 列。

Booking.where("value < ?", Booking.maximum(:value)).last

还有比这更好的查询吗?或者任何替代方案。

PS - value 不是唯一的。可能有两个具有相同值的元素

您可以使用 offsetlast:

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)

这将生成此查询:

 SELECT  DISTINCT value FROM "bookings"  ORDER BY value DESC LIMIT 1 OFFSET 1