总和计算在几天和小时

我正在尝试使用Knex在多个小时内按小时对logging进行分组。 所以,例如,9AM将是:

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

鉴于此快照中的logging,如何在多天内将它们汇总到小桶中?

在这里输入图像说明

如果输出查询结果,则可以在12/1212/13 19:00看到两个单独的结果。 这两天的计数需要总结为一个hour 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将时间戳截断为指定的精度(这意味着GROUP BY将不起作用,因为具有相同“小时”字段的两个时间戳的date可能仍然不同):

 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) 
Interesting Posts