1
Knexを使用して複数の日に渡って1時間ごとにレコードをグループ化しようとしています。したがって、たとえば、午前9時は次のようになります。複数の日と1時間ごとの合計の合計数
{
hour: 9AM, // for days 12/11, 12/12, 12/13
count: 10 // 10 Ids total over those days for hour 9AM
}
は、このスナップショット内のレコードを考えると、どのように私は複数日にわたるhour
バケツにそれらを集約することができますか?
I出力クエリの結果ならば、あなたは12/12
ため19:00
と12/13
するための2つの別々の結果を見ることができます。
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'も' 19th'時間をもたらすのではないでしょうか? – Growler
@Growler:あなたの質問の「時」フィールドに 'date_trunc'が返すものを見ることができます。これは、2つのタイムスタンプを少しの余裕と比較したいときに便利です:たとえば、日付を分だけ比較する場合、 'date_trunc( 'minute'、ts)= date_trunc(...)'を使用して、これは秒/ミリ秒精度を破棄します(等しいかどうかを確認する前に両側を0に設定します)。 – Marth