2009-04-11 7 views
6

J'essaie de trouver un enregistrement dans la base de données qui a la plus faible valeur de sa colonne datetime. En termes plus simples, je veux trouver un disque avec le plus tôt.Ruby on Rails: Trouver l'enregistrement avec la plus petite valeur d'une colonne spécifique

Je peux utiliser minimum pour trouver la valeur la plus basse, mais cela ne retournera que la valeur elle-même, et non l'ensemble de l'enregistrement. Je suppose que je pourrais créer une autre requête, mais je me demande s'il existe une façon plus efficace de le faire.

Répondre

17

Cela fonctionne:

earliest = Model.first(:order => 'column asc') 

— Où modèle est le nom de votre classe de modèle et colonne est le nom de la colonne datetime. Il va générer cette instruction SQL:

SELECT * FROM `Model` ORDER BY column asc LIMIT 1 
+0

Je sais que c'est assez tard, mais ce n'est pas moot en utilisant '.first' et' 'asc'' dans l'argument hash': order' –

+1

@AnkitSoni Sans le 'first' la requête retournerait plusieurs enregistrements. –

+0

Oh oui, merci! +1 –

0

Je ne suis pas sûr de RoR, mais avec SQL vous pouvez simplement trier les résultats de votre recherche par le champ datetime et limiter le nombre de résultats à 1.

SQL:

SELECT field1,field2,... FROM table ORDER BY datefield LIMIT 1; 

ou peut-être en Ruby (pas sûr que):

table.find(:all, :limit => 1, :order => 'datefield.asc') 
3
Table.first(:order => 'created_on') 
+1

Si cela semble jamais travaillé, il n'a pas à travailler dans Rails 4.1.6. – Ravenstine

2

@Ravenstine Comme rails 3, ce qui suit est la syntaxe correcte

earliest = Model.order('column asc').first 
+1

Ceci est la réponse correcte, l'autre forme se traduira par une erreur – doz87

+0

En 2016 (rails 4 au moins) c'est la bonne réponse. – Aleks