javascript - 多天和按小时分组的总和计数

标签 javascript node.js postgresql group-by knex.js

我正在尝试使用 Knex 对多天内的记录按小时进行分组。例如,上午 9 点将是:

{
  hour: 9AM, // for days 12/11, 12/12, 12/13
  count: 10 // 10 Ids total over those days for hour 9AM
}

鉴于此快照中的记录,如何将它们聚合到多天的小时存储桶中?

enter image description here

如果我输出查询结果,您可以看到19:0012/1212/13两个单独的结果。这两天的计数需要汇总为一个小时 19:00 分组:

ROWS [ anonymous {
    session_ids: [ 3200 ],
    hour: 2016-12-12T14:00:00.000Z,
    count: '1' },
  anonymous {
    session_ids: [ 3201 ],
    hour: 2016-12-12T15:00:00.000Z,
    count: '1' },
  anonymous {
    session_ids: [ 3203, 3202 ],
    hour: 2016-12-12T19:00:00.000Z,
    count: '2' },
  anonymous {
    session_ids: [ 3204, 3205 ],
    hour: 2016-12-13T19:00:00.000Z, // This count should be aggregated into the `19:00` grouping above
    count: '2' } ]

我当前的查询:

var qry = db.knex
  .select(db.knex.raw("array_agg(t2.id) as session_ids, date_trunc('hour', t2.start_timestamp) as hour"))
  .count('*')
  .from('sessions as t2')
  .groupByRaw("date_trunc('hour', t2.start_timestamp)")
  .orderBy(db.knex.raw("date_trunc('hour', t2.start_timestamp)"));

最佳答案

使用EXTRACT,而不是date_trunc:

var qry = db.knex
  .select(db.knex.raw("array_agg(t2.id) as session_ids, extract('hour' from t2.start_timestamp) as hour"))
  .count('*')
  .from('sessions as t2')
  .groupByRaw("extract('hour' from t2.start_timestamp)")
  .orderBy(db.knex.raw("extract('hour' from t2.start_timestamp)"));

date_trunc 将时间戳 chop 为指定精度(这意味着 GROUP BY 不起作用,因为具有相同“小时”字段的两个时间戳的天数可能仍然相同有所不同):

SELECT date_trunc('hour', NOW());
┌────────────────────────┐
│       date_trunc       │
├────────────────────────┤
│ 2016-12-18 19:00:00+01 │
└────────────────────────┘
(1 row)

EXTRACT 获取您请求的特定字段时:

SELECT extract('hour' from NOW());
┌───────────┐
│ date_part │
├───────────┤
│        19 │
└───────────┘
(1 row)

关于javascript - 多天和按小时分组的总和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41211728/

相关文章:

node.js - 部署在 Netlify 上时使用 Express 公开 API 路由

通过node.js的ajax跨域发布

php - 在 PHP 页面上使用 Casperjs 和 exec 时出现随机错误

php - Slim框架PDO PGSQL,不绑定(bind)参数

postgresql - 在 PostgreSQL 中用作 NOOP 的是什么?

javascript - 使用 Scrapy 从 HTML 中的 <script> 标签中获取数据

javascript - 谷歌折线图 : Change color when line down

ruby-on-rails-3 - Postgres 全文与 Rails 3 中的部分单词不匹配?

javascript - 如何等待按钮点击才能与Vue.js进行交互内容?

javascript - 了解如何将 Redis 与 Node.js 和服务器发送事件一起使用