【发布时间】:2011-01-07 23:29:53
【问题描述】:
如何在 SQLAlchemy 中按日期时间列的小时部分对查询结果进行分组?
【问题讨论】:
标签: python sqlite sqlalchemy
如何在 SQLAlchemy 中按日期时间列的小时部分对查询结果进行分组?
【问题讨论】:
标签: python sqlite sqlalchemy
这适用于 PostgreSQL:
.group_by(func.date_trunc('hour', date_col))
【讨论】:
如果我没记错的话,您必须先从时间戳中提取小时,然后才能按此分组。
query(extract('hour', timeStamp).label('h')).group_by('h')
【讨论】:
最近我不得不使用 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'
【讨论】:
您也可以在 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的答案
【讨论】:
在 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 的提示。
【讨论】: