1
我試圖使用Knex在多個天內按小時對記錄進行分組。因此,例如上午9時將是:總計數在多個天和小時
{
hour: 9AM, // for days 12/11, 12/12, 12/13
count: 10 // 10 Ids total over those days for hour 9AM
}
在此快照鑑於記錄,我怎麼能聚合他們進入跨越多天hour
桶?
如果我輸出的查詢結果,你可以看到19:00
爲12/12
和12/13
兩個獨立的結果。這兩天計數需要被彙總到一個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)"));
@Growler:錯過了'ORDER BY'子句中的'date_trunc'。我修好了它。 – Marth
這太好了。什麼是'date_trunc'對那麼好? 「你提到你要求的特定領域是什麼意思」? 'trunc'也不會產生'19小時'嗎? – Growler
@Growler:你可以看到'date_trunc'在你的問題的''hour''字段中返回什麼。當你想比較兩個時間戳和一點餘地時,它會很有用:例如,如果你只想比較日期到分鐘,你可以使用'date_trunc('minute',ts)= date_trunc(...)',這將丟棄秒/毫秒精度(在檢查相等之前,將它們設置爲0)。 – Marth