Группа по часам в SQLAlchemy? - PullRequest
       11

Группа по часам в SQLAlchemy?

7 голосов
/ 22 января 2010

Как сгруппировать результаты запроса по часовой части столбца datetime в SQLAlchemy?

Ответы [ 5 ]

13 голосов
/ 22 января 2010

Это работает для PostgreSQL:

.group_by(func.date_trunc('hour', date_col))
12 голосов
/ 22 января 2010

Если я правильно помню, вы должны сначала извлечь час из своей временной метки, а затем вы можете сгруппировать по ней.

query(extract('hour', timeStamp).label('h')).group_by('h')
1 голос
/ 15 июня 2015

Недавно мне пришлось сделать аналогичную вещь, используя 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'

0 голосов
/ 02 марта 2017

В 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)

Спасибо этой теме за подсказку.

0 голосов
/ 26 сентября 2010

Вы также можете сделать это на 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

Этот ответ адаптирован из ответа на аналогичный вопрос здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...