在SQLAlchemy中按小时分组?

时间:2010-01-21 22:29:06

标签: python sqlite sqlalchemy

如何按SQLAlchemy中的datetime列的小时部分对查询结果进行分组?

5 个答案:

答案 0 :(得分:13)

这适用于PostgreSQL:

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

答案 1 :(得分:12)

如果我没记错的话,你必须首先从你的时间戳中提取小时,然后你可以将其分组。

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

答案 2 :(得分:1)

最近我不得不使用SqlAlchemy和MySQL做类似的事情并最终使用DATE_FORMAT(http://www.w3schools.com/sql/func_date_format.asp)按小时,分钟,秒分组

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

要仅按小时分组,它将是'%H'而不是'%H:%I:%s'

答案 3 :(得分:0)

在Oracle中,使用func.trunc(MyTable.dt, 'HH')

然而,这有点挑剔。这失败了:

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

但这成功了:

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

感谢this thread提示。

答案 4 :(得分:-2)

您也可以在Python中执行此操作。假设您有一个有序的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

此答案改编自类似问题的答案here