2015-09-24 14 views
5

Versuchen Sie, den letzten und einzigen Datensatz aus dieser Tabelle unten zu erhalten. Es gibt einige Doppelgänger, diese sollten herausgefiltert werden.WÄHLEN Sie den letzten Eintrag in der Spalte als eindeutig aus der anderen Spalte

id topic action date 
1 10127 2 2015-09-24 15:28:30 
2 10127 4 2015-09-24 15:29:26 
3 10127 2 2015-09-24 15:30:01 
4 10127 3 2015-09-24 15:30:55 
5 10127 1 2015-09-24 16:07:25 
6 10127 5 2015-09-24 16:10:25 
7 10127 4 2015-09-24 16:29:26 

Die Verwendung dieser Abfrage (hier gefunden) ist meine beste Leistung, aber gibt nur ein Ergebnis zurück.

SELECT MAX(action) as action,topic,date FROM ...... 
GROUP by topic 
ORDER by action DESC 

Möchten Sie dieses Angebot als neuesten Eintrag erhalten und einzigartig auf ‚Aktion‘ für ‚Thema‘:

id topic action date 
3 10127 1 2015-09-24 15:30:01 
4 10127 2 2015-09-24 15:30:55 
5 10127 3 2015-09-24 16:07:25 
6 10127 4 2015-09-24 16:10:25 
7 10127 5 2015-09-24 16:29:26 

Hoffnung jemand hat eine Lösung! Danke!

+0

Ja. Die Zeitstempel sind immer eindeutig. – KJS

+0

Da Ihre IDs inkrementell sind, hat der letzte Datensatz die maximale ID. richtig? – Andreas

Antwort

4

Sie können es mit einer Unterabfrage tun. Dies ist die vollständige sqlfiddle: http://sqlfiddle.com/#!9/f7afa/23

Select * FROM (

SELECT 
    DISTINCT `topic`, `action`, `date` 
FROM 
    ForgeRock  
ORDER by date DESC, action ASC 

) as X 
    GROUP BY action 
+0

Große Lösung! Vielen Dank! – KJS

1

Sie benötigen eine Unterabfrage verwenden:

SELECT * 
FROM yourtable 
JOIN (
    SELECT topic, MAX(action) 
    FROM yourtable 
    GROUP BY topic 
) AS child ON (yourtable.topic = topic) AND (yourtable.action = child.action) 

Die Unterabfrage findet die größte Aktion für jedes Thema. Diese Daten werden dann verwendet, um sich mit der gleichen Tabelle zu verbinden, mit der Sie die anderen Felder in diesem "max'd" -Datensatz abrufen.

1

Entschuldigung, wenn Sie Ihre Frage nicht richtig gelesen haben. Hier ist eine Arbeits query:

SELECT id,topic,@action:[email protected]+1 AS ACTION,DATE 
FROM 
    (SELECT t1.id, 
      t1.topic, 
      t1.date , 
      t2.id AS dup 
    FROM tab t1 
    LEFT JOIN tab t2 ON t1.action = t2.action 
    AND t2.id > t1.id) AS t, 

    (SELECT @action:=0) AS tmp 
WHERE dup IS NULL; 

Ergebnis:

+----+-------+--------+---------------------+ 
| id | topic | ACTION | date    | 
+----+-------+--------+---------------------+ 
| 3 | 10127 |  1 | 2015-09-24 15:30:01 | 
| 4 | 10127 |  2 | 2015-09-24 15:30:55 | 
| 5 | 10127 |  3 | 2015-09-24 16:07:25 | 
| 6 | 10127 |  4 | 2015-09-24 16:10:25 | 
| 7 | 10127 |  5 | 2015-09-24 16:29:26 | 
+----+-------+--------+---------------------+ 
5 rows in set (0.00 sec) 
Verwandte Themen