2013-03-03 51 views
5

如何按小時在Postgres & Rails中進行分組?我已經閱讀了相當多的答案,但我得到的錯誤。Rails&Postgresql:如何按小時對查詢進行分組?

該按日期分組時的工作原理:

Model.group("date(updated_at)").count 

然後我試過小時以下,但他們沒有工作:

Model.group("hour(updated_at)").count 
Model.group("date_format(updated_at, '%H')").count 
Model.group("extract(hour from updated_at)").count 

一旦我發現某些小時,我需要更新,那麼我將如何獲得那些時間的模型?即:

Model.where("hour(updated_at) = ?", 5) 

回答

12

你可以嘗試以下

Model.group("DATE_PART('hour', updated_at)").count 

UPDATE:

如何查找記錄

Model.where("DATE_PART('hour', updated_at) = ?", 5) 
+0

謝謝,這個工程。你能看看我更新的問題 - 我如何獲得第二個查詢工作? – 2013-03-03 03:29:17

+0

看看更新後的答案 – jvnill 2013-03-03 03:33:29

+0

非常好,謝謝。 – 2013-03-03 03:40:06

0

的PostgreSQL提供了兩種方法來提取日期的一個部分/時間:

EXTRACT是存在於其他基於SQL的數據庫中的SQL標準函數。

Model.group("EXTRACT(hour FROM created_at)").count 
Model.where("EXTRACT(hour FROM created_at) = ?", 5) 

date_part功能

Model.group("date_part('hour', updated_at)").count 
Model.where("date_part('hour', updated_at) = ?", 5) 

官方documentation

0

如果你想同時日期和時間,您可以使用date_trunc:

Model.group("date_trunc('hour', created_at)").count

如果你想爲了答案:

Model.order("date_trunc('hour', created_at)").group("date_trunc('hour', created_at)").count

沒錯這就是奇怪的是你不能只是做order(:created_at),但哦。

相關問題