2017-02-06 5 views
-2

Ich versuche, erste Zeile jeder Gruppe in mysql auszuwählen. Ich folgte Beispielen wie How to select the first row for each group in MySQL?Mysql Reihenfolge Gruppe durch seltsames Verhalten

Aus irgendeinem Grund funktioniert das nicht für mich. Die folgende SQL-Having

SELECT stationID, vrID, vrsCreatedAt FROM (
SELECT VRS.stationID, VR.vrVehicleID, VRS.vrID, VRS.vrsCreatedAt FROM VehicleRoutes VR 
    LEFT OUTER JOIN VehicleRouteStations VRS ON VRS.vrID = VR.vrID 
    WHERE VR.vrRouteID = 8 AND VR.vrStatus = 'active' AND VR.vrID = 65 
    ORDER BY VRS.vrsCreatedAt DESC) x 

Und die Ergebnismenge ist

43 65 2017-02-06 17:15:14 
9 65 2017-02-06 17:13:12 
42 65 2017-02-06 17:09:25 
41 65 2017-02-06 17:07:14 
69 65 2017-02-06 17:03:58 
........ 
42 65 2017-01-17 16:35:47 
63 65 2017-01-17 14:34:57 
322 65 2017-01-17 14:31:45 
315 65 2017-01-17 13:53:33 

Wenn ich die Gruppe von statemenet

SELECT stationID, vrID, vrsCreatedAt FROM (
SELECT VRS.stationID, VR.vrVehicleID, VRS.vrID, VRS.vrsCreatedAt FROM VehicleRoutes VR 
    LEFT OUTER JOIN VehicleRouteStations VRS ON VRS.vrID = VR.vrID 
    WHERE VR.vrRouteID = 8 AND VR.vrStatus = 'active' AND VR.vrID = 65 
    ORDER BY VRS.vrsCreatedAt DESC) x GROUP BY vrID 

I

315 65 2017-01-17 13:53:33 
Beantragen

Dies ist definitiv nicht erste Reihe, es ist die letzte. Selbst wenn ich ORDER BY VRS.vrsCreatedAt DESC versuche, bekomme ich das gleiche Verhalten.

Ich weiß, das sollte funktionieren, seit ich vorher verwendet habe. Vielleicht funktioniert das in der neuesten MySQL-Version 5.7.17-0ubuntu0.16.04.1 (Ubuntu) nicht mehr?

Danke

+0

Welche Gruppe? Ple Geben Sie Beispieldaten und die erwartete Ausgabe zusammen mit der Erläuterung der Logik an. – GurV

+0

Versuchen Sie 'MIN (vrsCreatedAt)' – marekful

+2

'GROUP BY' garantiert keine spezifischen Ergebnisse für nicht aggregierte, nicht gruppierte Felder. – Uueerdo

Antwort

0

Sie müssen im Ergebnis spezifisch sagen, was Sie wollen. Es gibt mehrere Zeilen, die in einer Zeile aggregiert sind.

Für das Feld, das Sie gruppieren, erhalten Sie offensichtlich den gleichen Wert, also ist dies kein Problem. Alle anderen Felder müssen angedeutet werden. Sie erhalten nicht „das gleiche Feld‘ oder so ähnlich, erhalten Sie entweder

  • das Feld durch Ihre Aggregation (zB Angabe ‚max‘ oder ‚min‘ oder ‚Summe‘)
  • eine nicht näher bezeichnet Feld (um nicht zufällig zu sagen, es gibt eine "Regel" dort, aber es kann geändert werden und ist Implementierung-abhängig.

Grundlinie ist: wenn Sie ein bestimmtes Ergebnis erhalten möchten, sollten Sie entweder nicht tun dies mit einer Gruppierung (die Ergebnisse in einer Unterabfrage auswählen?) oder einfach eine Aggregation für dieses Feld verwenden