2016-11-02 3 views
-1

Dies ist meine vorhandene Tabelleum Geld zu mysql Datensatz nur aus einer Spalte

id name version 
| 1 | a | 1.1 | 
| 2 | b | 2.1 | 
| 3 | c | 3.1 | 
| 4 | d | 1.2 | 
| 5 | e | 4.1 | 

wie kann ich eine Abfrage schreiben Ergebnisse zu erzeugen, wo ich alle Datensätze zurück, aber nur der letzte Eintrag in der Spalte Version wird ausgewählt wie unten?

id name version 
| 4 | d | 1.2 | 
| 2 | b | 2.1 | 
| 3 | c | 3.1 | 
| 5 | e | 4.1 | 
+1

Bitte Tabellennamen und Spalten enthalten. – JosephGarrone

+0

Darüber hinaus macht Ihr Ergebnis keinen Sinn, da die Zeile "d" als ID "5" hat, aber in den Ergebnissen hat es 1 als seine ID. – JosephGarrone

+0

Sie Logik ist nicht klar, es sei denn, in den gewünschten Ergebnissen meinen Sie 4 statt 1 – Mihai

Antwort

0

Wenn verwenden können schwimmen erfolgen Sie bevorzugen eine etwas weniger mühsame Lösung ...

SELECT x.* 
    FROM t x 
    JOIN 
    (SELECT MAX(grade) grade 
     FROM t 
     GROUP 
      BY FLOOR(grade) 
    ) y 
    ON y.grade = x.grade 

http://sqlfiddle.com/#!9/f17db1/16

+0

danke @Strawberry es funktioniert –

-1

Das ist ein bisschen umständlich, aber es kann

SELECT 
    SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY REPLACE(grade,'.','')*1 DESC),',',1) as id, 
    SUBSTRING_INDEX(GROUP_CONCAT(letter ORDER BY REPLACE(grade,'.','')*1 DESC),',',1) as letter, 
    MAX(grade) as grade 
FROM 
    t 
    GROUP BY SUBSTRING_INDEX(grade,'.',1) 
    ORDER BY REPLACE(grade,'.','')*1 

Unter der Annahme, die letzte Spalte ist Sie ORDER BY LASTCOL direkt

FIDDLE

CREATE TABLE t 
    (`id` int, `letter` varchar(7), `grade` varchar(55)) 
; 

INSERT INTO t 

VALUES 
    (1, 'a', '1.1'), 
    (2, 'b', '2.1'), 
    (3, 'c', '3.1'), 
    (4, 'd', '1.2'), 
    (5, 'e', '4.1') 
+1

hey @Mihai bearbeitet, dass ist perfekt, ich danke Ihnen so sehr. Du bist großartig in MYSQL –

+0

Ein bisschen mühsam? Ich werde sagen! – Strawberry

Verwandte Themen