如何按SQLAlchemy中的datetime列的小时部分对查询结果进行分组?
答案 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