Répondre

3

Cela devrait fonctionner.

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

qui va générer cette requête:

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

ceci fonctionnera également: 'Booking.select (" valeur DISTINCT "). Order (" valeur DESC OFFSET 1 LIMIT 1 ")' –

4

Vous pouvez utiliser offset et last:

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

qui produira instruction SQL suivante:

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

Essayé. Que se passe-t-il s'il y a deux éléments de valeur égale et que les deux éléments ont la plus grande valeur. 'offset (1)' peut ne pas fonctionner – Kangkan

+3

Vous devez spécifier cette exigence car le deuxième élément le plus important et le second élément unique le plus grand ne sont pas identiques. – Ilya

+0

pour aucun problème d'éléments maximum unique Je pense que la spécification de l'option DISTINCT dans la requête va le résoudre. –