2012-09-05 17 views
0

我有以下類別:軌,發現Postgres數據庫重複條目

class Product < ActiveRecord::Base 
    has_one :total_purchase 
end 

class TotalPurchase < ActiveRecord::Base 
    belongs_to :product 
end 

我的表有以下欄目(我省略了大部分的清晰度):

Product 
id | title | end_date | price | discount 

TotalPurchase 
id | product_id | amount 

衆多產品具有相同的products.title,products.end_date和totalpurchases.amount,我想在特定日期之間標識所有這些。我目前使用下面的sql查詢來識別它們:

Product.find_by_sql("select products.title, products.end_date, total_purchases.amount from products left join total_purchases on products.id = total_purchases.product_id where products.end_date > '2012-08-26 23:00:00' and productss.end_date < '2012-09-02 22:59:59' group by products.end_date, products.title, total_purchases.amount having count(*) > 1") 

我如何將上面的代碼寫成rails查詢而不是使用find_by_sql?

回答

1
Product.select('products.end_date, products.title, total_purchases.amount'). 
    joins('left join total_purchases on products.id = total_purchases.product_id'). 
    where('products.end_date > :start_date 
    and products.end_date < :end_date', 
    :start_date => '2012-08-26 23:00:00', 
    :end_date => '2012-09-02 22:59:59'). 
    group('products.end_date, products.title, total_purchases.amount'). 
    having('count(*) > 1') 
+0

謝謝,但我得到的運行查詢的以下錯誤:列「products.id」必須出現在GROUP BY子句或聚合函數 – shane

+0

@shane已答覆修訂中使用,但請注意,這裏假設你的產品都具有唯一的ID,並且這與您所做的相同(即,給定的products.title和products.end_date組合是唯一的) – MrTheWalrus

+0

查詢現在不僅僅查找帶有ID的產品發生不止一次?由於產品ID對於所有條目都是唯一的,因此它不會定位重複的end_date,title和amount。謝謝你的語法,我會多挖一些 – shane