2017-07-27 60 views
0

我想知道約1小時,1到2小時和2個多小時的約會次數。Rails select,group,have,count

Appointment 
.select("id, EXTRACT(MINUTE FROM (check_out_at - check_in_at)) as minutes") 
.group("id, minutes") 
.having("count('minutes') < 60") 
.count 

計數方法返回以下異常:

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "as" 
LINE 1: ...EXTRACT(MINUTE FROM (check_out_at - check_in_at)) as minutes... 
+0

你能發佈完整的SQL查詢嗎?另外,我假設你正在使用PostgreSQL,對吧? (因爲輸出中的「PG :: SyntaxError」) – MrYoshiji

+0

@ user1262904您是否找到了解決方案? –

回答

0

假設id是主鍵,你既不需要group by也不having。你可以簡單地做這個任命讓數在1小時:

Appointment.where("(EXTRACT(epoch FROM (check_out_at - check_in_at))) < 3600").count 

爲了得到按小時分組的所有約會的次數,你可以這樣做:

Appointment.group("Floor(Extract(epoch from (check_out_at - check_in_at))/3600)").count 

輸出會是這樣:

{0.0=>1, 2.0=>31, 3.0=>11} 

意思是1個約會0-1小時之間,31個2-3小時之間等等。