2009-04-11 12 views
6

मैं डेटाबेस में एक रिकॉर्ड खोजने की कोशिश कर रहा हूं जिसमें उसके डेटाटाइम कॉलम का सबसे कम मूल्य है। सरल शब्दों में, मैं जल्द से जल्द एक रिकॉर्ड खोजना चाहता हूं।रेल पर रूबी: एक विशिष्ट कॉलम के निम्नतम मूल्य के साथ रिकॉर्ड प्राप्त करें

मैं न्यूनतम मूल्य खोजने के लिए न्यूनतम उपयोग कर सकता हूं, लेकिन यह केवल मूल्य ही लौटाएगा, न कि संपूर्ण रिकॉर्ड।

मुझे लगता है कि मैं एक और क्वेरी बना सकता हूं, लेकिन मुझे आश्चर्य है कि ऐसा करने का एक और अधिक प्रभावी तरीका है या नहीं।

उत्तर

17

यह काम करेगा:

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

— कहाँ मॉडल अपने मॉडल वर्ग के नाम और स्तंभ है datetime स्तंभ का नाम है। यह इस एसक्यूएल बयान उत्पन्न करेगा:

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

मुझे पता है कि यह बहुत देर हो चुकी है, लेकिन यह 'हैस्ट' और '' asc'' 'दोनों का उपयोग तर्क हैश के अंदर है: ऑर्डर' –

+1

@AnkitSoni बिना पहले 'क्वेरी' एकाधिक रिकॉर्ड लौटाएगा। –

+0

ओह ठीक है, धन्यवाद! +1 –

0

मैं आतंक विरोधी बारे में निश्चित नहीं हूँ, लेकिन एसक्यूएल के साथ आप सिर्फ datetime क्षेत्र से आपकी क्वेरी के परिणामों को सॉर्ट और करने के लिए परिणामों की संख्या सीमित कर सकते हैं 1.

एसक्यूएल:

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

या हो सकता है रूबी (यकीन है कि हालांकि नहीं) में:

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

यदि यह कभी काम किया, यह रेल 4.1.6 में काम करने के लिए प्रतीत नहीं होता। – Ravenstine

2

@Ravenstine रेल 3 के रूप में, निम्नलिखित उचित सिंटैक्स है

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

यह सही उत्तर है, दूसरे फॉर्म में एक त्रुटि – doz87

+0

2016 में (कम से कम रेल 4) यह सही जवाब है। – Aleks

संबंधित मुद्दे