2014-02-15 30 views
0

在我的Rails應用程序中,我試圖在沒有ActiveRecord的情況下執行查詢。基本上我想要做的是選擇記錄的created_at匹配給定的日期時間,然後按字符串type分組記錄,然後平均它們的值。 注:我正在使用PostgreSQL。Postgresql在Rails UTC日期時間上選擇,然後按字符串分組並執行平均值

因此,例如,下面的Movie記錄運行所需的查詢會產生這樣的:

{ Blah: 6, Hi: 2, Hello: 4}

id | value | event_id | user_id |   created_at   |   updated_at   | type 
----+-------+----------+---------+----------------------------+----------------------------+------------- 
    1 | 1  |  1 |  1 | 2014-01-22 03:42:44.86269 | 2014-02-15 01:54:15.562552 | Blah 
    2 | 10 |  1 |  1 | 2014-01-22 03:42:44.86269 | 2014-02-15 01:54:15.574191 | Blah 
    3 | 1  |  1 |  1 | 2014-01-22 03:42:44.86269 | 2014-02-15 01:54:15.577179 | Hi 
    4 | 2  |  1 |  1 | 2014-01-22 03:42:44.86269 | 2014-02-15 01:54:15.578864 | Hi 
    5 | 7  |  1 |  1 | 2014-01-22 03:42:44.86269 | 2014-02-15 01:54:15.580517 | Hello 
    6 | 1  |  1 |  1 | 2014-01-22 03:42:44.86269 | 2014-02-15 01:54:15.58203 | Hello 
(6 rows) 

我想我可以和平均分拼湊組,但我m跑進牆壁試圖匹配基於created_at的記錄。我已經試過:

select * from movies where 'movies.created_at' = '2014-01-22 03:42:44.86269' 

與其他一些變化,我嘗試調用to_char,包括:

select * FROM movies WHERE 'movies.created_at' = to_char('2014-01-22 03:42:44.86269'::TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS'); 

在上面看起來像這樣的第一個記錄加載ActiveModel記錄:

=> #<Movie id: 1, value: "1", event_id: 1, user_id: 1, created_at: "2014-01-22 03:42:44", updated_at: "2014-02-15 01:54:15", type: "Blah"> 

created_at,這是一個ActiveSupport::TimeWithZone類的樣子:

=> Wed, 22 Jan 2014 03:42:44 UTC +00:00 

我想它與UTC有關,但我無法弄清楚。如果有人有任何想法,我將不勝感激。

回答

1

單引號值被Postgres解釋爲文字字符串。因此,您的第一個查詢正在查找字符串movies.created_at等於文字字符串2014-01-22 03:42:44.86269的記錄 - 這些字符串均不存在。

Postgres中引用的標識符用雙引號引起來;還要注意帶有明確表引用(movies.created_at)的引用用引號外的圓點("movies"."created_at")正確引用 - 如果圓點位於引號內,則將其解釋爲列名稱的一部分。

您可能需要將Postgres SQL reference保留在將來。 :)

+0

啊,你是對的。如果我只是遵循'.to_sql'給我的ActiveRecord查詢,我會擁有它。固執的我......謝謝! – tvalent2

相關問題