2016-07-09 7 views
1

Im ein bisschen neu zu SQL und für mein Projekt Ich brauche Datenbank Sortierung und Filterung zu tun:SQL: Wählen Sie nur eine Zeile der Tabelle mit dem gleichen Wert

Nehmen wir an, meine Datenbank wie folgt aussieht:

========================================== 
| id  |  email  | name 
========================================== 
| 1  | [email protected]  | John 
| 2  | [email protected]  | Peter 
| 3  | [email protected]  | Steward 
| 4  | [email protected]  | Ethan 
| 5  | [email protected]  | Bob 
| 6  | [email protected]  | Patrick 
========================================== 

Was soll ich tun, nur mit dem gleichen E-Mail-te zurück die letzte Spalte haben:

========================================== 
| id  |  email  | name 
========================================== 
| 3  | [email protected]  | Steward 
| 5  | [email protected]  | Bob 
| 6  | [email protected]  | Patrick 
========================================== 

Vielen Dank im Voraus!

+1

Welches DBMS wird verwendet? –

Antwort

1

SQL Query:

SELECT * FROM test.test1 WHERE id IN (
    SELECT MAX(id) FROM test.test1 GROUP BY email 
); 

Your sample dataset Query result

Hope this löst Ihr Problem. Vielen Dank.

1

Ein allgemeiner Weg, dies in SQL zu tun ist, um die ANSI-Standard row_number() Funktion zu verwenden:

SELECT email, MAX(id) 
FROM mytable 
GROUP BY email 

Verwendung:

select t.* 
from (select t.*, row_number() over (partition by email order by id desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
1

Sie folgende Abfrage den MAXid Wert pro email bekommen können die obige Abfrage als eine abgeleitete Tabelle können Sie den gesamten Datensatz erhalten:

SELECT t1.* 
FROM mytable AS t1 
JOIN (
    SELECT email, MAX(id) AS id 
    FROM mytable 
    GROUP BY email 
) AS t2 ON t1.id = t2.id