在knex中按时间或小时分组

时间:2016-12-12 20:40:58

标签: node.js postgresql knex.js

我正在使用Postgres与NodeJS和Knex。我有一些created_at格式2016-12-12 14:53:17.243-05的记录。我希望按小时对所有记录进行分组,以便:

  • 小时14:00:00-15:00:00在该小时内将有n条记录。
  • 小时15:00:00-16:00:00在该小时内将有n条记录。
  • 等...

我打算通过查询我想要的记录,然后使用momentJS按小时对它们进行分组来实现这一点,但我认为这应该在查询上处理。我只是不确定语法是什么样的。

这是我的开始查询:

  getChatVolume: function(startDate, endDate) {
    var chats = db.knex
        .select(['sessions.id', db.knex.raw('sessions.start_timestamp::date as date')])
        .from('sessions')
        .where(db.knex.raw('sessions.start_timestamp'), '>=', startDate)
        .andWhere(db.knex.raw('sessions.start_timestamp'), '<=', endDate)
        .groupByRaw("date_trunc('hour', sessions.start_timestamp)")
    return chats;
  },

This explains如何为MySQL,Oracle和SQL Server做到这一点,而不是Knex。

1 个答案:

答案 0 :(得分:0)

groupByRaw — .groupBy(sql)
Adds a raw group by clause to the query.

所以试试这个,

.groupByRaw("date_trunc('hour', messages.created_at)")