2014-03-19 21 views
4

我試圖得到對象有的最後5天。目前,我的代碼是這樣的得到最後5個唯一created_at日期

Post.uniq('performed_at').ascending.last(5).group_by{|p| p.performed_at} 

,但我已經得到4個日期,而不是5,我想這是因爲有一些是在同一天創建的最後5的2項。如何準確獲得郵政進入的最後5天?

+0

更新。 我使用了一些@xdazz代碼。 Post.select('perform_at')。uniq.order('perform_at DESC')。limit(5).pluck(:perform_at).reverse 我做了一個反向操作,因爲我想按照時間順序的最後5天。我選擇('DISTINCT perform_at')爲我返回一個副本,所以我將它們分開了.select('perform_at')。uniq – Berimbolo

回答

3

你可以這樣做:

Post.select('DISTINCT created_at').order('created_at DESC').limit(5).pluck(:created_at) 
+0

我嘗試過這樣做,但不是created_at而是使用不同的查詢日期'perform_at',純粹是日期而不是時間戳。技術上講,它應該是相同的,但在控制檯上的結果顯示 2014年3月17日 2014年3月12日 2013年12月12日 2013年12月12日 2013年12月11日 第3和第4項似乎仍然是重複的。 – Berimbolo

0

假設你只是想日期本身,而不是唯一的日期時間,這將是更好的:

Post.order('created_at desc').uniq.limit(5).pluck('DATE(created_at)') 

這將只返回獨特的日曆日期,沒有任何特定的時間。

0

只是此更新。我得到了它的工作,這就是我做到的。

Post.select('performed_at').uniq.order('performed_at DESC').limit(5).pluck(:performed_at).reverse 

我也加反向,因爲我想按照時間順序返回給我的天數組。我也有uniq(),因爲select('DISTINCT perform_at')仍然返回重複的日期。

希望這會有所幫助。

相關問題