2009-04-11 3 views
6

Sto cercando di trovare un record nel database che abbia il valore più basso della sua colonna datetime. In parole più semplici, voglio trovare un record con il primo tempo.Ruby on Rails: trova il record con il valore più basso di una colonna specifica

Posso usare il minimo per trovare il valore più basso, ma questo restituirà solo il valore stesso e non l'intero record.

Suppongo di poter creare un'altra query, ma mi chiedo se esiste un modo più efficiente per farlo.

risposta

17

questo funzionerà:

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

— Dove modello è il nome della classe del modello e la colonna è il nome della colonna datetime. Esso genera questa istruzione SQL:

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

So che è abbastanza tardi, ma non è moot che usa sia '.first' che' 'asc'' all'interno dell'hash dell'argomento per ': order' –

+1

@AnkitSoni Senza il' primo' la query restituirebbe più record. –

+0

Oh giusto, grazie! +1 –

0

io non sono sicuro di RoR, ma con SQL si può semplicemente ordinare i risultati della query dal campo datetime e limitare il numero di risultati a 1.

SQL:

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

o forse in Ruby (non sono sicuro però):

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

Se questo abbia mai lavorato, non sembra funzionare in Rails 4.1.6. – Ravenstine

2

@Ravenstine Come di rotaie 3, la seguente sintassi corretta è

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

Questa è la risposta corretta, l'altro modulo comporterà un errore – doz87

+0

Nel 2016 (almeno 4 binari) questa è la risposta corretta. – Aleks