更好的方法找到第二大元素在轨道上的红宝石激活记录查询

问题描述:

我正在使用此查询来查找第二大元素。我正在查询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 
+1

这也将工作: 'Booking.select(“DISTINCT value”)。order(“value DESC OFFSET 1 LIMIT 1”)' –

您可以使用offsetlast

Booking.order(:value).offset(1).last 

将产生下面的SQL语句:

SELECT `bookings`.* FROM `bookings` 
ORDER BY `bookings`.`value` DESC 
LIMIT 1 OFFSET 1 
+0

尝试。 如果有两个值相等的元素并且这两个元素都具有最大值,该怎么办? 'offset(1)'可能不起作用 – Kangkan

+3

您应该指定这个要求,因为_第二大元素_和第二大唯一元素_不是相同的。 – Ilya

+0

for none unique maximum elements problem我认为在查询中指定DISTINCT选项将解决它。 –