2016-10-12 8 views
0

gruppiert ich Ergebnisse von SERIAL_NUMBER Gruppierung und ich möchte die letzten Datensätze für jede Gruppe ID DESC nach Datensatz dies zeigen, was ich bisher habe:wollen neuesten Datensätze zurück, wenn die Ergebnisse von

SELECT * FROM 

(SELECT `SERIAL_NUMBER`, `PART_NUMBER` , `POSITION` , `DUE_CAP_CHECK_DATE` , `DUE_OVERHAUL_DATE` 
    FROM `history_card` ORDER BY `HISTORY_ID` DESC) AS X 

GROUP BY `SERIAL_NUMBER` 

aber nicht den letzten Datensatz zurückkehrt, gibt es die ersten, (

+0

Warum verwenden Sie eine verschachtelte Abfrage? Das würde gut gehen ... SELECT 'SERIAL_NUMBER',' PART_NUMBER', 'POSITION',' DUE_CAP_CHECK_DATE', 'DUE_OVERHAUL_DATE' FROM' history_card' GROUP NACH 'SERIAL_NUMBER' ORDER BY' HISTORY_ID' DESC –

+1

Ja, habe ich gerade versucht, es funktioniert, aber es gibt mir immer noch, erste Zeilen anstelle der letzten für jede Gruppe, deshalb habe ich versucht, zuerst Unterabfrage tun, um sie nach HISTORY_ID desc und dann wählen – Mikail

Antwort

1

Sie sind zu GROUP BY die heinously verwirrend nicht-Standard-MySQL-Erweiterung zu mißbrauchen Lies https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html (diese Erweiterung ist wie ein sprechendes Pferd Wir... wundere mich nicht, dass es schlecht funktioniert. Wir wundern uns, dass es überhaupt funktioniert.)

Sie können den neuesten (größten) Wert von HISTORY_ID für jeden Wert von SERIAL_NUMBER aus Ihrer Tabelle wie folgt erhalten:

SELECT MAX(HISTORY_ID) FROM history_card GROUP BY SERIAL_NUMBER 

Dann Sie diesen Satz von HISTORY_ID Werten können abgerufen werden, was Sie von Ihrem Tisch wollen.

SELECT SERIAL_NUMBER, PART_NUMBER, POSITION, DUE_CAP_CHECK_DATE, DUE_OVERHAUL_DATE 
    FROM history_card 
    WHERE HISTORY_ID 
     IN (SELECT MAX(HISTORY_ID) FROM history_card GROUP BY SERIAL_NUMBER)    
Verwandte Themen