2016-05-26 13 views
1

Ich versuche, Maximum Date und Second Max Date auszuwählen, kann aber keinen Erfolg erhalten.MYSQL: So erhalten Maximum und Sekunde Maximum Datum in Einzelabfrage

Dies sind Tabellendaten.

ID Country DATE 
1 Canada 2016-05-26 
2 Canada 2016-05-25 
3 Canada 2016-05-24 

4 USA  2016-04-02 
5 USA  2016-04-01 
6 USA  2016-03-20 

Erwartet Ausgabe

Country Max_Date 2nd_Date 

Canada 2016-05-26 2016-05-25 
USA  2016-04-02 2016-04-01 

Was habe ich also getan:

Get Max Datum diese Abfrage verwenden.

select Country, MAX(Date) from tbl GROUP BY (Country); 

für zweiten Max Datum aber nicht Ergebnis erhalten:

SELECT Country, MAX(date) FROM tbl WHERE Date NOT IN 

(select MAX(FROM) from tbl GROUP BY (Country)) GROUP BY (Country) 

Was soll ich erwartete Ausgabe zu erhalten versuchen. Danke

+0

[Dies] (http://stackoverflow.com/questions/15969614/in-sql Der Post-to-select-the-top-2-Zeilen-für-jede-Gruppe) -Post sollte Sie in die richtige Richtung zeigen. Möglicherweise als Duplikat schließen? – Hill

+0

Wählen Sie x. * Aus my_table x verbinden my_table y auf y.something = x.etwas und y.other_thing <= x.other_thing Gruppe von x.etwas, x.other_thing mit count (*) <= 2; – Strawberry

Antwort

1

Oder Sie könnten versuchen, diese

SELECT s.Country, Max(s.Date) Max_Date, 
(SELECT t.Date 
FROM tbl t 
Where s.Country=t.Country 
ORDER BY Date DESC 
LIMIT 1,1) 2nd_Date 
FROM tbl s 
GROUP BY COUNTRY; 

Die LIMIT-Klausel Null basiert, so dass mit Hilfe von Parametern 1,1 überspringen dem ersten (dh max) Wert & kehrt nur einen Wert (2. Max)

HINWEIS - Wenn das maximale Datum dupliziert wird, gibt die Abfrage Max_Date & 2nd_Date als denselben Wert zurück - wenn das nicht das ist, was Sie wollen, dann können Sie DISTINCT zur inneren Abfrage hinzufügen.

+0

Funktioniert wie ein Charme Danke :) –

0

Das kann ein Schmerz sein. Hier ist eine Methode:

select t.country, maxdate, max(t.date) as secondate 
from tbl t left join 
    (select country, max(date) as maxdate 
     from tbl 
     group by country 
    ) c 
    on t.country = c.country and t.date < c.maxdate 
group by t.country; 
0

Keine Notwendigkeit für verschachtelte Abfragen dieses Problem zu lösen:

SELECT t1.country, max(t1.date), max(t2.date) 
FROM tbl t1 
    JOIN tbl t2 ON t1.country = t2.country AND t2.date < t1.date 
GROUP BY t1.country; 
0

Versuchen Sie dieses

Select Country, MAX(Date) As Date From tbl GROUP BY Country Order By Date Desc Limit 2;

+0

Sie haben meine Frage falsch gelesen. Ich habe gerade zwei Länder als Beispiel angeführt, aber ich wäre mehr als zwei Länder. :) –