2013-03-03 16 views
5

Come faccio a raggruppare per ora in Rails Postgres &? Ho letto un bel po 'di risposte SO ma sto ricevendo errori.Rails & Postgresql: come raggruppare le query per ora?

questo funziona quando il raggruppamento per data:

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

poi ho provato quanto segue per ora, ma non ha funzionato:

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

Una volta ho trovato alcune ore ho bisogno di aggiornare , come potrei quindi ottenere i modelli con quelle ore? Vale a dire:

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

risposta

12

Si potrebbe provare la seguente

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

UPDATE:

come trovare record

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

Grazie, questo funziona. Potete per favore dare un'occhiata alla mia domanda aggiornata - come faccio a far funzionare la seconda query? –

+0

guarda la risposta aggiornata – jvnill

+0

Eccellente, grazie. –

0

PostgreSQL presenta due modi per estrarre una parte di data/ora:

EXTRACT è la funzione standard SQL esistente in altri database basati su SQL.

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

date_part funzione

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

Il funzionario documentation.

0

Se si desidera che sia la data e l'ora, è possibile utilizzare date_trunc:

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

E se volete le risposte in ordine:

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

Sì è strano che non puoi semplicemente fare order(:created_at) ma vabbè.

Problemi correlati