一尘不染

按日期排序分组,而不考虑小时/分钟/秒

sql

嘿,我尝试使用Sequelize(用于PostgreSQL的Node.js ORM)从数据库中查询,尝试按日期范围进行分组,并保留该表中有多少项的计数。

现在我的代码是

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

但是,正如您所看到的,分组仅考虑了确切的日期(包括秒),因此分组实际上是没有意义的,因为无论什么时候都不会有重叠的项目具有完全相同的秒计数。因此,我希望它只是根据日,年和月进行分组。

我认为这将必须像sequelize.fn(…)


阅读 170

收藏
2021-05-16

共1个答案

一尘不染

如您所说,它已经完成,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限制偏移量和组

2021-05-16