2016-11-28 6 views
0

私は各顧客の最終日の最後のレコードを統計テーブルから取得しようとしています。 最後の日から最も売れている商品を持つ顧客を選択したいと思います。すべての顧客からレールの最後のレコードを選択

統計情報は1時間ごとに生成されるため、顧客からの複数の統計情報がありますが、最後の統計情報が必要です。

私はいくつかのコマンドを試しましたが、ただエラーが表示されました。

Statistic.where("created_at < ?",1.day.ago).select(:customer_id).distinct.order(created_at: :desc) 

または

Statistic.where("created_at < ?",1.day.ago).select(:customer_id).distinct.last 

は摘むと最高のソリューションですか?または2つの選択肢を作成する必要がありますか? どこに 'sold_items'を置くべきかわかりません。

これも解決策ですが、わかりません。

Customer.all.each do |customer| 
    stats = customer.statistics.where("created_at < ?",Date.today).last 
    count = stats.sold_items if stats.sold_items > count 
    best = customer if count = stats.sold_items 
end 

モデル: 顧客にhas_many:統計 - belongs_toの統計:顧客

+0

モデル宣言を追加できますか? 最初のクエリを機能させるには、結合を行う必要があります。だから二番目。 – marmeladze

+0

'Customer'モデルと' Statistic'モデルの間に 'has_many''' belongs_to'関係がありますか? – sa77

+0

右。顧客has_many:統計および統計belongs_to:顧客 –

答えて

1
Statistic.joins("inner join (select customer_id,max(created_at) as created_at from statistics group by customer_id) as stats2 on statistics.customer_id = stats2.customer_id and statistics.created_at = stats2.created_at").pluck("max(statistics.sold_items)") 

これはあなたのこれまでの最後の日に、ほとんどのアイテムを販売し、顧客からの最大販売された商品を提供します、

基本的にまず各顧客の最新の統計情報が必要です。それらの統計からsold_itemsのmaximumが必要です。

したがって、ネストされたクエリ(select customer_id,max(created_at) as created_at from statistics group by customer_id)は、各顧客に対して最大created_atを選択しています。外部クエリは、実際のstatisticsとこれらの結果を結合し、最後の日付基準に該当するもののみを選択します。最後にpluck("max(statistics.sold_items)")の結果から最大sell_itemsを選択してください。

HEREは、各グループから最新のレコードを見つける別のリンクです。

+0

うわー、これは素晴らしいです!ありがとうございました! –

関連する問題