2016-10-31 3 views
0

Ich versuche, die letzten Vorteile gerade vor Anpfiff für Fußballspiele zu erhalten, die Betfairs historische Daten verwenden. Meine Datenbank sieht wie folgt aus:Nur spätestes Datum von doppelten Reihen zeigen

Current DB

Jetzt historischen Daten der Betfair Die Quoten viele Male am Tag aufzeichnet und hat daher viele doppelte Daten. Bisher habe ich es geschafft, alle Chancen für die ausgewählten Correct Score Märkte vor dem Anpfiff zu bekommen.

Wie Sie sehen können, gibt es doppelte Datensätze, aber ich möchte nur die späteste (max) Zeit für jeden der richtigen Scores erhalten. Ich habe die Zeilen markiert, die die letzte Abfrage nur ausgeben soll.

My SQL-Anweisung lautet wie folgt:

SELECT "SCHEDULED_OFF", "FULL_DESCRIPTION", "EVENT", 
    "SELECTION_ID", "SELECTION", "ODDS", "WIN_FLAG", "LATEST_TAKEN" 
FROM "bfinf_other_161017to161023_161026123339" 
WHERE "FULL_DESCRIPTION" LIKE 'English Soccer/English Premier League%' 
    AND "EVENT" = "Correct Score" 
    AND "LATEST_TAKEN" < "SCHEDULED_OFF" 
ORDER BY "FULL_DESCRIPTION" ASC, "SELECTION" ASC, "LATEST_TAKEN" DESC 

I BY "FULL_DESCRIPTION" GRUPPE versucht haben und "Auswahl", aber nichts scheint zu geschehen.

Jede Hilfe wäre sehr dankbar, danke.

Michael

+0

Überprüfen Sie mehrere Antworten, nicht nur die akzeptierte. – Shadow

+0

Die allgemeine GROUP BY-Regel besagt: Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument einer SET-Funktion sein! – jarlh

+0

Sehr seltsame Tabellenname, 'bfinf_other_161017to161023_161026123339'. Haben Sie verschiedene Tabellen für verschiedene Daten? Woher? – jarlh

Antwort

0

Sie einen Filter in Klausel und subselect verwenden können mit max LATEST_TAKEN Gruppe von SELECTION_ID

SELECT `SCHEDULED_OFF`, `FULL_DESCRIPTION`, `EVENT`, `SELECTION_ID`, `SELECTION`, `ODDS`, `WIN_FLAG`, `LATEST_TAKEN` 
FROM `bfinf_other_161017to161023_161026123339` 
WHERE `FULL_DESCRIPTION` LIKE 'English Soccer/English Premier League%' 
AND `EVENT` = `Correct Score` 
AND `LATEST_TAKEN` IN (select MAX(LATEST_TAKEN` 
         from `bfinf_other_161017to161023_161026123339` 
         group by `SELECTION_ID`) 
ORDER BY `FULL_DESCRIPTION` ASC, `SELECTION` ASC, `LATEST_TAKEN` DESC 

nicht doppelte Anführungszeichen verwenden, basierend auf Sie (wenn Sie benötigen Backticks)

0

Fügen Sie ein Prädikat für die Where-Klausel hinzu, das die Ausgabe auf die Zeile mit der neuesten Datetime beschränkt. Verwenden Sie die Unterabfrage, um das späteste Datum für jede Auswahl zu bestimmen.

SELECT "SCHEDULED_OFF", "FULL_DESCRIPTION", "EVENT", 
    "SELECTION_ID", "SELECTION", "ODDS", "WIN_FLAG", "LATEST_TAKEN" 
FROM "bfinf_other_161017to161023_161026123339" a 
WHERE "FULL_DESCRIPTION" LIKE 'English Soccer/English Premier League%' 
    AND "EVENT" = "Correct Score" 
    AND "LATEST_TAKEN" < "SCHEDULED_OFF" 
    and LATEST_TAKEN = 
     (Select Max(LATEST_TAKEN) 
     From bfinf_other_161017to161023_161026123339 
     Where Selection_Id = a.Selection_Id) 
ORDER BY "FULL_DESCRIPTION" ASC, "SELECTION" ASC, "LATEST_TAKEN" DESC 
Verwandte Themen