-1

私はこのクエリを使って2番目に大きい要素を探しています。私はvalue列の質問をしています。ruby​​ on railsのアクティブレコードクエリで2番目に大きい要素を見つけるより良い方法

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

これ以上のクエリはありますか?またはこれに代わるもの。

PS - valueは一意ではありません。次のSQL文を生成します

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

::これは動作するはず

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

答えて

3

2つのあなたがoffsetlastを使用することができ、同じ値

+1

これも動作します: 'Booking.select(" DISTINCT value ")。order(" value DESC OFFSET 1 LIMIT 1 ")' –

4

を持つ要素があるかもしれません。

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

をしようとしました:このクエリを生成します

Booking.select("DISTINCT value").order('value DESC').offset(1).limit(1) 

。 等しい値を持つ2つの要素があり、両方の要素が最大の値を持つ場合はどうなりますか? 'offset(1)'が動作しない可能性があります – Kangkan

+3

2番目に大きいelement_と2番目に大きいunique_が同じではないため、この要件を指定してください。 – Ilya

+0

一意の最大要素の問題はありません私はクエリでDISTINCTオプションを指定することで解決すると思います。 –

関連する問題