2013-03-03 38 views
5

Làm cách nào để nhóm theo giờ trong Postgres & Đường ray? Tôi đã đọc qua một vài câu trả lời SO nhưng tôi nhận được lỗi.Rails & Postgresql: cách nhóm các truy vấn theo giờ?

này hoạt động khi nhóm theo ngày:

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

Sau đó, tôi đã thử các sau đây cho giờ nhưng họ đã không làm việc:

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

Khi tôi đã tìm thấy những giờ nhất định tôi cần phải cập nhật , làm thế nào tôi có thể lấy các mô hình với những giờ đó? Ví dụ:

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

Trả lời

12

Bạn có thể thử như sau

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

UPDATE:

Làm thế nào để tìm thấy hồ sơ

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

Cảm ơn, công trình này. Bạn có thể vui lòng xem câu hỏi được cập nhật của tôi không - làm cách nào để truy vấn thứ hai hoạt động? –

+0

xem câu trả lời cập nhật – jvnill

+0

Tuyệt vời, cảm ơn bạn. –

0

PostgreSQL trình bày hai cách để trích xuất một phần của ngày/time:

EXTRACT là hàm chuẩn SQL tồn tại trong cơ sở dữ liệu dựa trên SQL khác.

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

date_part chức năng

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

Quan chức documentation.

0

Nếu bạn muốn cả ngày và giờ, bạn có thể sử dụng date_trunc:

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

Và nếu bạn muốn câu trả lời theo thứ tự:

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

Vâng đó là lạ đó bạn không thể chỉ làm order(:created_at) mà còn tốt.

Các vấn đề liên quan