嘿,所以我试图从数据库中查询,使用Sequelize (Node.js ORM表示postgreSQL),我尝试按日期范围分组,并统计表中有多少项。
现在我的代码是
Task.findAll({
attributes: ['createdAt'],
group: 'createdAt'
})但是正如您所看到的,分组只考虑了确切的日期(包括秒),所以分组实际上是没有意义的,因为不管发生什么,都不会有重叠的项,并且具有完全相同的秒计数。所以我希望它只是基于日,年,月的分组。
我假设它必须类似于sequelize.fn(.)
发布于 2016-01-29 01:14:12
正如您所说的,这是用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
发布于 2019-01-09 18:25:16
所选的答案在这里行不通。
这就是对我有用的东西。
Task.findAll({
attributes: [
[Sequelize.literal(`DATE("createdAt")`), 'date'],
[Sequelize.literal(`COUNT(*)`), 'count']
],
group: ['date'],
})发布于 2021-05-25 05:21:18
用于后缀的和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']
})https://stackoverflow.com/questions/35073918
复制相似问题