2010-01-21 20 views

Respuesta

9

Si no recuerdo mal debe extraer primero la hora de su marca de tiempo y luego se pueden agrupar por eso.

query(extract('hour', timeStamp).label('h')).group_by('h') 
+2

Funcionó cuando pongo citas por hora. – Dave

+0

Vaya ... sí, tendrá que hacer eso. Actualicé mi ejemplo. Gracias por atrapar eso. – Scott

10

Esto funciona para PostgreSQL:

.group_by(func.date_trunc('hour', date_col)) 
+0

No mencioné que estoy usando sqlite; date_trunc es postgres? – Dave

-2

También lo puede hacer en Python. Asumiendo que tiene una ordenada query_result:

from itertools import groupby 

def grouper(item): 
    return item.created.hour 
for (hour, items) in groupby(query_result, grouper): 
    for item in items: 
     # do stuff 

Esta respuesta es una adaptación de una respuesta a una pregunta similar here

0

recientemente he tenido que hacer una cosa similar utilizando sqlalchemy y MySQL y terminó con el DATE_FORMAT (http://www.w3schools.com/sql/func_date_format.asp) al grupo por hora, minuto, segundo

.group_by(func.date_format(date_col, '%H:%i:%s')) 

para único grupo por hora sería '%H' en lugar de '%H:%I:%s'

1

En Oracle, use func.trunc(MyTable.dt, 'HH')

Es un poco quisquilloso, sin embargo. Esta falla:

q = session.query(func.trunc(MyTable.dt, 'HH'), func.sum(MyTable.qty) \ 
      .group_by(func.trunc(MyTable.dt, 'HH')) 

Pero esto tiene éxito:

trunc_date = func.trunc(MyTable.dt, 'HH') 
q = session.query(trunc_date, func.sum(MyTable.qty) \ 
      .group_by(trunc_date) 

Gracias a this thread por la punta.