2016-08-07 9 views
0

Ich habe mein Bestes versucht, dies in den letzten Tagen Google, aber ich kann die Lösung nicht finden, die ich für MS Access benötigen eine Tabelle der Fussball Ergebnisse oder MySQLRück letzten 5 Ergebnisse basierend auf Datum und Gruppen

Ich habe wo ich die letzten 5 Ergebnisse pro Heimmannschaft basierend auf dem Datum zurückziehen möchte.

Ich habe dies im Zugriff nach MS-Rat versucht und ich kann es nicht funktionieren, wie es heißt es sollte. Ich bin ziemlich neu in MySQL und bin ein bisschen näher mit dem untenstehenden Code gekommen, aber das gibt nur das letzte Ergebnis zurück und wenn ich es in 2 ändere, wird es nicht laufen, weil Unterabfrage mehr als 1 Zeile zurückgibt. Ich brauche nicht die genaue Antwort. Ich bin glücklich, wenn jemand mir einen Link für Access oder MySQL geben kann. Unten ist, was ich verwendet habe, das das letzte Ergebnis gut zurückgegeben hat.

SELECT t1.* 
FROM TBL_ALL_English_Results t1 
WHERE t1.id = (SELECT t2.id 
      FROM TBL_ALL_English_Results t2 
      WHERE t2.Home_Team = t1.Home_Team    
      ORDER BY t2.id DESC 
      LIMIT 1) 

Antwort

0

Betrachten wir eine korrelierte Zählung Aggregatabfrage verwenden, die eine Rangfolge der Datensätze von DATE und HOME_TEAM Gruppe berechnet, dann wird diese Rangfolge Abfrageergebnisse zu filtern. Unten sollte in MySQL und MS Access, sogar SQL Server und anderen Dialekten konform sein.

SELECT t1.* 
FROM TBL_ALL_English_Results t1 
INNER JOIN 
(
    SELECT t2.Home_Team, t2.Date, 
      (SELECT Count(*) FROM TBL_ALL_English_Results sub 
      WHERE t2.Date <= sub.Date 
      AND t2.Home_Team = sub.Home_Team) AS GameOrder 
    FROM TBL_ALL_English_Results As t2 
) AS LastFiveDates 
ON t1.Date = LastFiveDates.Date 
AND t1.Home_Team = LastFiveDates.Home_Team 
WHERE LastFiveDates.GameOrder <= 5 

Während die meisten Datenbanken diese Abfrage ausführen können, kann die Leistung unterscheiden sich vor allem in der Dateiebene Datenbank, MS Access, wenn Tabellenergebnisse über 10.000 sind in Bezug auf die Serverebene im Gegensatz RDMS, MySQL.

0

MySQL macht dies ein bisschen schwierig. Wahrscheinlich ist der einfachste Weg Variablen verwenden:

SELECT aer.* 
FROM (SELECT aer.*, 
      (@rn := if(@ht = aer.Home_Team, @rn + 1, 
         if(@ht := aer.Home_Team, 1, 1) 
         ) 
      ) as rn 
     FROM TBL_ALL_English_Results aer CROSS JOIN 
      (SELECT @ht := '', @rn := 0) params 
     ORDER BY aer.Home_Team, aer.id DESC 
    ) aer 
WHERE rn <= 5; 
+0

wow Ich bin völlig verloren mit dem, was in den oben genannten passiert, wie ich sagte, ich bin neu in MySQL. Ich danke Ihnen jedoch für Ihre Zeit, aber ich erhalte den untenstehenden Fehler, da ich mich damit verfahren habe. Ich weiß nicht, wo ich suchen soll. "[Err] 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, für die richtige Syntax in der Nähe von '@ht: = aer.Home_Team, 1, 1) ) als rn ' at line 4 '** – colic0

+0

Dies verwendet Variablen zu Zählen Sie die Zeilen in der Tabelle für jedes Heimteam auf. Dies ist oft der einfachste Ansatz in MySQL. In den meisten anderen Datenbanken (aber nicht MS Access) würden Sie die ANSI-Standardfunktion 'row_number()' verwenden. –

Verwandte Themen