2016-08-03 10 views
0

Hallo ich mag aus einer Tabelle nach Datum geordnet ab auszuwählen als gruoup von smth. Auf den ersten phpMyAdmin einen Fehler ausgeben (sql_mode = only_full_group_by) und i fixieren durch die Flagge von my.cnf entfernt und ich weiß nicht, ob dieses Update für langfristig gut ist, habe ich irgendwo gelesen, dass bei diesem Update Sie unerwünschte Ergebnisse erhalten können . Ich habe versucht, **select * from (select * from log order by date desc) tmp group by imei**, aber die Ergebnisse sind vom ältesten Datum nicht vom neuesten Datum, es gibt mir das IMEI von der ersten ID nicht von der letzten.Mysql wählen, um nach dem Datum ab dann die Gruppe durch Spalte

+0

Es gibt in den Ergebnissen keinen Unterschied zwischen 'select * from (select * from log nach Datum geordnet ab) tmp Gruppe von imei' und' select * from (select * from log nach Datum geordnet) tmp Gruppe von imei' –

+0

ich habe jetzt versucht, 'select * from (select * from log nach Datum geordnet ab Limit 100) durch imei' tmp-Gruppe und es funktioniert, aber ich will nicht –

Antwort

0

Für die Gruppierung Ergebnis spielt es keine Rolle, ob Sie die Eingabe bestellt haben. Wenn ich Ihre Frage richtig interpretiere, möchten Sie den neuesten Protokolleintrag für jedes IMei erhalten. Sie müßten, so etwas tun:

SELECT l1.* 
    FROM logs as l1 
    LEFT OUTER JOIN logs as l2 
    ON l1.imei = l2.imei 
    AND l1.date < l2.date 
    WHERE l2.date IS NULL 

wo Sie im Wesentlichen für jeden Protokolleintrag zu fragen (l1), für die kein Protokolleintrag (l2) mit der gleichen IMEI existiert, aber ein größeren Datum.

Wenn Sie nur dann, wenn der letzte Protokolleintrag war für jeden imei wissen wollen, wird dies ausreichen:

SELECT imei, MAX(date) 
    FROM log 
    GROUP BY imei 
+0

um die Ergebnisse zu begrenzen ich habe Trie d dein erstes Kommando, aber es dauert zu lange und ich erhalte kein Ergebnis, es bleibt einfach geladen. Ich möchte genau das tun, was du mit dem 2. Befehl gemacht hast, aber ich möchte alle Spalten spalten, nicht nur imei und Datum –

+0

Ich habe gelöscht wo l2.date null ist, aber es gibt mir alle Daten aus der Tabelle nicht eindeutig data by imei –

+0

Wenn das Ergebnis zu lange dauert, sollten Sie Indizes für die Spalten imei und date hinzufügen. Beim Löschen der Teil „WHERE l2.date IS NULL“, fragen Sie für alle Einträge und das ist, was Sie erhalten. – seven77

0

SELECT * FROM log WHERE id in (SELECT max (id) FROM Loggruppe von IMEI)