我正在使用帶有NodeJS的postgres和knex在給定日期範圍內將會話標識按小時聚合。我的start_timestamp格式爲2016-12-12 14:53:17.243-05
。我想按小時對所有記錄進行分組,例如:knex SQL - 列必須出現在GROUP BY子句中或用於聚合函數中
- 小時
14:00:00-15:00:00
在該小時內將有n條記錄。 - 小時
15:00:00-16:00:00
在該小時內將有n條記錄。 - 等...
鑑於查詢
db.knex.count('t1.id as session_ids')
.from('sessions as t1')
.where(db.knex.raw('t1.start_timestamp'), '>=', startDate)
.andWhere(db.knex.raw('t1.start_timestamp'), '<=', endDate)
.groupByRaw("date_trunc('hour', t1.start_timestamp)");
我的開始日期和結束日期決定的範圍1日。所以根據每天的小時分組不應該有重複/模糊的時間。
我成功地可以按小時來獲得每個記錄的計數:
[ anonymous { session_ids: '6' },
anonymous { session_ids: '1' },
anonymous { session_ids: '1' },
anonymous { session_ids: '3' },
...
但我需要顯示自己的實際時間,因爲這樣的:
{
hour: 10
session_ids: 5 //5 session IDs
}
下面count
添加.select('t1.start_timestamp')
,如圖所示in this example,出現以下錯誤:
Unhandled rejection error: column "t1.start_timestamp" must appear in the GROUP BY clause or be used in an aggregate function
由於t1.start_timestamp
出現在GROUP BY階段,所以此錯誤對我無意義。
此外,我已經檢查出PostgreSQL -must appear in the GROUP BY clause or be used in an aggregate function尋求幫助。我的記錄中沒有歧義,因此數據庫應該知道要選擇哪些記錄。