2014-02-14 77 views
0

在Rails中,我想在页面上显示每个“日”创建了多少新的“用户”。如何针对Postgres运行任意SQL

在常规的SQL,我会做这样的事情:

SELECT 
DATE(created_at) as day, 
COUNT(1) as new_user_count 
FROM users 
WHERE created_at > '2014-01-01 01:01:01' 
GROUP BY day 

我怎样才能在Rails的执行这个对我的Users表?再次,我需要在一个页面上显示,所以我没有在PG GUI上寻找指示。

具体而言,我使用Heroku和Postgres。

回答

1

做这样的:

sql = "SELECT DATE(created_at) as day, COUNT(1) as new_user_count " \ 
     "FROM users WHERE created_at > '2014-01-01 01:01:01' " \ 
     "GROUP BY day" 

ActiveRecord::Base.connection.execute(sql) 
+0

你忘了在最后关闭字符串吗? * QUERY >> –

+0

@DonnyP Nope。请参阅http://blog.jayfields.com/2006/12/ruby-multiline-strings-here-doc-or.html – Agis

+0

PG ::错误:错误:在“用户”处或附近出现语法错误 - 看起来我们需要空格每行后也:) –

0

除了原始的SQL解决方案,您可以考虑创建一个视图:

create view daily_user_counts as 
SELECT 
    DATE(created_at) as day, 
    COUNT(*) as new_user_count 
FROM users 
WHERE created_at > '2014-01-01 01:01:01' 
GROUP BY day; 

...并为它建立一个只读的模式:

class DailyUserCount < ActiveRecord::Base 

    def readonly? 
    true 
    end 

end 

然后:

DailyUserCount.where("day > ? ", from).order(:day) 
相关问题