2010-01-21 17 views

Odpowiedz

9

Jeśli dobrze pamiętam najpierw należy wyodrębnić godzinę ze swojego datownika, a następnie można grupować według tego.

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

Zadziałało, gdy umieściłem cytaty na godzinę. – Dave

+0

Ups ... tak, musisz to zrobić. Zaktualizowałem mój przykład. Dzięki za złapanie tego. – Scott

10

Działa to dla PostgreSQL:

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

Nie wspomniałem, że używam sqlite; date_trunc to postgres? – Dave

-2

Można to również zrobić w języku Python. Zakładając, że uporządkowana 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 

Ta odpowiedź jest dostosowany od odpowiedzi na podobne pytanie here

0

Ostatnio musiałem zrobić coś podobnego przy użyciu sqlalchemy i MySQL i skończyło się używając DATE_FORMAT (http://www.w3schools.com/sql/func_date_format.asp) do grupy przez godzinę, minutę, sekundę

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

w grupie tylko przez godzinę byłoby '%H' zamiast '%H:%I:%s'

1

W Oracle, użyj func.trunc(MyTable.dt, 'HH')

Jednak jest to trochę skomplikowane. To się nie powiedzie:

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

Ale to udaje:

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

Dzięki this thread dla końcówki.