2016-11-28 8 views
0

Ich versuche, aus der Statistiktabelle den letzten Datensatz vom letzten Tag jedes Kunden zu erhalten. Ich möchte den Kunden mit den meistverkauften Artikeln des letzten Tages auswählen.Wählen Sie aus allen Kunden den letzten Datensatz in Rails

Die Statistiken werden jede Stunde generiert, so dass es mehrere Statistiken vom Kunden gibt, aber ich brauche nur die letzte.

Ich habe mehrere Befehle versucht, ich erhalte nur Fehler.

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

oder

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

Ist die beste Lösung mit zupfen? Oder soll ich 2 selects erstellen? Ich habe keine Ahnung, wo ich 'sold_items' platzieren soll.

das könnte auch eine Lösung sein, aber ich bin mir nicht sicher.

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 

Die Models: Kunde has_many: Statistik - Statistik belongs_to: Kunden

+0

könnten Sie bitte Modelldeklarationen hinzufügen? Um Ihre erste Anfrage zu bearbeiten, sollten Sie eine Verknüpfung erstellen. also die zweite. – marmeladze

+0

Haben Sie eine 'has_many'' gehört_to' Beziehung zwischen Ihren 'Kunden' und' Statistics' Modellen? – sa77

+0

Rechts. Kunde has_many: Statistik und Statistik gehört zu: Kunde –

Antwort

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)") 

Dieser enthält die maximalen verkauften Artikel vom Kunden geben wird, die die meisten am letzten Tag, bisher verkauft

Lassen Sie mich durch diese gehen,

Grundsätzlich zunächst benötigen Sie die letzten Statistiken für jeden Kunden. Dann brauchst du die maximum von sold_items aus diesen Statistiken.

So ist die verschachtelte Abfrage (select customer_id,max(created_at) as created_at from statistics group by customer_id) wird die maximalen created_at für jeden Kunden auswählen und dann die äußeree Abfrage der tatsächlichen statistics mit diesen Ergebnissen beitritt und nur diejenigen, die fallen unter den letzten Zeitpunkt Kriterien auswählen. dann am Ende pluck("max(statistics.sold_items)") wählen Sie die maximale Anzahl der verkauften Artikel aus diesen Ergebnissen.

HERE ist ein weiterer Link, der den neuesten Datensatz aus jeder Gruppe findet.

+0

Wow, das ist großartig! Vielen Dank! –

Verwandte Themen