Ich versuche, den letzten WorkOrder
für jeden Customer
auszuwählen. Ich habe ORDER BY
und GROUP BY
verwendet, aber das zurückgegebene Ergebnis ist nicht das neueste WorkOrder
.Begrenzen Sie eine Zeile pro eindeutigen Spaltenwert, indem Sie nach max. Spaltenwert wählen
Tabellenstruktur:
WorkOrder
id
customer_id
create_date
...
Beispieldaten:
WorkOrder.id WorkOrder.customer_id WorkOrder.create_date ...
1 1 2012-01-01 12:00:00
2 1 2016-06-29 12:00:00
3 2 2015-05-05 12:00:00
Gewünschtes Ergebnis:
WorkOrder.id WorkOrder.customer_id WorkOrder.create_date ...
2 1 2016-06-29 12:00:00
3 2 2015-05-05 12:00:00
Aktuelle Code:
$query = DB::table('WorkOrder')
->orderBy('WorkOrder.create_date', 'desc')
->groupBy('WorkOrder.customer_id');
// select * from `WorkOrder` group by `WorkOrder`.`customer_id` order by `WorkOrder`.`create_date` desc
Aktuell Ergebnis:
WorkOrder.id WorkOrder.customer_id WorkOrder.create_date ...
1 1 2012-01-01 12:00:00
3 2 2015-05-05 12:00:00
Sie verwenden 'group by', was bedeutet, dass nicht gruppierte Felder in beliebiger Reihenfolge zurückgegeben werden können. mysql gibt im Allgemeinen den ersten gefundenen Wert zurück, auch wenn dieser nicht von derselben Zeile stammt, aus der die gruppierten Felder ihre Werte erhalten. –
Also nix die 'Gruppe von'? Wie beschränke ich es auf ein Ergebnis pro 'customer_id'? – Shane
kann es nicht als einzelne einfache Abfrage tun. Sie benötigen eine Unterabfrage, um die IDs der gewünschten Zeilen abzurufen, und anschließend eine äußere Abfrage, um die gesamte Zeile für diese IDs abzurufen. –