2012-09-06 129 views

回答

7

您可以用類似發現,在過去的最近戰績:

Record.where("created_at <= ?", Date.today).order_by("created_at DESC").limit(1) 

同樣,你可以有最接近的紀錄在未來

Record.where("created_at >= ?", Date.today).order_by("created_at ASC").limit(1) 

,然後比較至極一個是最接近到當前日期...

有可能是一個解決方案來做一個單一的請求,但我找不到(如果你使用SQL服務器,有一個方法DATEDIFF可以h ELP)。

更新由於米沙

如果您確信所有created_at是在過去,你看最後創建的記錄,這可以寫成

Record.order("created_at").last 

更新

要獲取所有記錄創建相同的日期,然後最後一個記錄:

last_record_date = Record.max(:created_at) 
Record.where(:created_at => (last_record_date.at_beginning_of_day)..(last_record_date.end_of_day)) 
+1

理論上,將來可能會有'created_date',但如果您使用Rails的自動時間戳,則不會發生這種情況。所以你可以忽略'where'子句。使用'order_by(「created_at DESC」)'應該足夠了。 – Mischa

+0

@米沙你真是太棒了!我已經寫了答案,認爲它可以是任何日期,並且當我再次閱讀問題時將其更改爲'created_at',而不用考慮簡化解決方案。謝謝。 – Baldrick

+0

謝謝Baldrick我想要得到最接近今天日期的記錄,不是對它們進行排序,而是對它們進行過濾。所以,沿着MIN(Date(created_at) - Date.today)這一行。明白我的意思了嗎? – chell