【问题标题】:Sequelize grouping by date, disregarding hours/minutes/secondsSequelize 按日期分组,不考虑小时/分钟/秒
【发布时间】:2016-05-06 13:29:50
【问题描述】:

嘿,所以我试图从数据库中查询,使用 Sequelize(用于 postgreSQL 的 Node.js ORM),我试图按日期范围分组,并计算该表中有多少项目。

现在我的代码是

 Task.findAll({
    attributes: ['createdAt'],
    group: 'createdAt'
  })

但是正如您所见,分组只考虑了确切的日期(包括秒数),因此分组实际上是没有意义的,因为无论如何都不会有具有完全相同秒数的重叠项目。 所以我希望它只是基于日、年和月的分组。

我假设它必须是类似 sequelize.fn(...)

【问题讨论】:

    标签: javascript sql node.js postgresql sequelize.js


    【解决方案1】:

    用于 Sequelize 和 MYSQL

    这对我有用:

    Model.findAll({
          attributes: [
            /* add other attributes you may need from your table */
            [sequelize.fn('DATE', sequelize.col('createdAt')), 'Date']
          ],
          group: [sequelize.fn('DATE', sequelize.col('createdAt')), 'Date']
        })
    

    【讨论】:

      【解决方案2】:

      所选答案在这里不起作用。

      这对我有用。

      Task.findAll({
          attributes: [
              [Sequelize.literal(`DATE("createdAt")`), 'date'],
              [Sequelize.literal(`COUNT(*)`), 'count']
          ],
          group: ['date'],
      })
      

      【讨论】:

      • MariaDB 想要不带引号的字段名...` [Sequelize.literal(DATE(createdAt)), 'date']`
      • @AnttiA 非常好。我的答案是在 PostgreSQL 上测试的。
      • MySql 也需要不带引号的字段名,否则它可以工作
      • 错误:FUNCTION cms.date_trunc 不存在
      【解决方案3】:

      你也可以试试:

           group:'DATE(date_added)' 
           or
           group:'WEEK(date_added)'
           or
           group:'MONTH(date_added)'
      

      虽然你必须设置你的 sql_mode = "" 因为否则你会得到 ONLY_FULL_GROUP_BY 错误。

      【讨论】:

        【解决方案4】:

        正如你所说,已经用sequelize.fn(...) 完成了,没有别的办法。试试:

        Task.findAll({
          group: [sequelize.fn('date_trunc', 'day', sequelize.col('createdAt'))]
        })
        

        我认为这可能会完成这项工作。如果没有,我们会看看怎么做;)

        请注意,PostgreSQL 允许您截断到特定的时间间隔。欲了解更多信息,请访问:http://www.postgresql.org/docs/9.1/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

        另外,要了解组(和顺序)的工作原理,请参阅 Sequelize 的文档:https://github.com/sequelize/sequelize/blob/172272c8be9a847b2d64f0158826738703befddf/docs/docs/models-usage.md#manipulating-the-dataset-with-limit-offset-order-and-group

        【讨论】:

        • @repo 很高兴为您提供帮助!您还可以为未来的观众投票。我将包含 group 属性的 sequelize 文档
        • @barbarity 当你想用特定的时区截断时你会怎么做?
        猜你喜欢
        • 2017-01-04
        • 1970-01-01
        • 2015-05-07
        • 2015-03-16
        • 1970-01-01
        • 2015-08-21
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        相关资源
        最近更新 更多