2017-07-27 96 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小时之间等等。