【问题标题】:Group by hour in SQLAlchemy?在 SQLAlchemy 中按小时分组?
【发布时间】:2011-01-07 23:29:53
【问题描述】:

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

【问题讨论】:

    标签: python sqlite sqlalchemy


    【解决方案1】:

    这适用于 PostgreSQL:

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

    【讨论】:

    • 我没有提到我在使用 sqlite; date_trunc 是 postgres 吗?
    【解决方案2】:

    如果我没记错的话,您必须先从时间戳中提取小时,然后才能按此分组。

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

    【讨论】:

    • 糟糕...是的,您需要这样做。我更新了我的例子。感谢您了解这一点。
    【解决方案3】:

    最近我不得不使用 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'

    【讨论】:

      【解决方案4】:

      您也可以在 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的答案

      【讨论】:

        【解决方案5】:

        在 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 的提示。

        【讨论】:

          猜你喜欢
          • 2021-10-26
          • 2022-01-16
          • 1970-01-01
          • 2019-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-09
          相关资源
          最近更新 更多