2016-10-09 7 views
0

Ich möchte Zeilen mit dem letzten Datum und dem nächsten Datum erhalten. Ich habe viele Seiten durchsucht und habe immer noch keine Idee, wie ich die SQL-Anweisung schreiben soll.Wie bekomme ich die neuesten Daten aus der Tabelle

Von diesem

id  inputDate  refNo 
1  2016-09-22  16092201820X0X 
2  2016-09-22  16092200230X1X 
3  2016-09-22  16092200810X3X 
4  2016-09-21  16092200430X2X 
5  2016-09-21  16092201460X7X 
6  2016-09-21  16092200430X1X 
7  2016-09-20  16092202260X3X 
8  2016-09-20  16092200330X6X 
9  2016-09-20  16092200610X3X 
10  2016-09-19  16092200430X8X 
11  2016-09-19  16092200450X1X 

dieser

id  inputDate  refNo 
1  2016-09-22  16092201820X0X 
2  2016-09-22  16092200230X1X 
3  2016-09-22  16092200810X3X 
4  2016-09-21  16092200430X2X 
5  2016-09-21  16092201460X7X 
6  2016-09-21  16092200430X1X 
+3

Welche Marke/Version der RDBMS-Datenbank ist das? – LukStorms

+0

Ich benutze Xampp, http: // localhost/phpmyadmin/zum Testen zu Hause, aber meine Arbeit verwendet Hibernate Spring mvc. Ich weiß nicht, was rdbms meiner Arbeit ist – peter

Antwort

1

In ANSI-Standard SQL würden Sie dense_rank() verwenden:

select t.* 
from (select t.*, dense_rank() over (order by inputdate desc) as seqnum 
     from t 
    ) t 
where seqnum <= 2; 

MySQL nicht die ANSI-Standard-Fensterfunktionen unterstützt (im Gegensatz zu allen anderen großen Datenbanken).

In MySQL ist dies schwieriger. Hier ist eine bequeme Methode:

select t.* 
from t join 
    (select inputdate 
     from (select distinct inputdate from t) t 
     order by inputdate desc 
     limit 2 
    ) tt 
    on t.inputdate = tt.inputdate; 

Sie eigentlich nicht die zweite Unterabfrage benötigen, so können Sie tun:

select t.* 
from t join 
    (select distinct inputdate 
     from t 
     order by inputdate desc 
     limit 2 
    ) tt 
    on t.inputdate = tt.inputdate; 

Aber es kann verwirrend sein, sich daran zu erinnern, ob select distinct vor oder nach dem order by geschieht .

+0

danke für schnelle Antwort, ich habe Ihren Code versucht, aber ich habe rote Linie in der zweiten Auswahl (dieser Typ der Klausel wurde zuvor geparst) und auch das Wort seqnum (ein Alias ​​wurde zuvor gefunden) . – peter

+0

@peter: Sie müssen uns sagen, welche DBMS Sie verwenden und die ** genaue ** Fehlermeldung, die Sie erhalten, wenn Sie diese Anweisung ausführen. –

+0

http://pasteboard.co/cUGtHr9nq.png http://pasteboard.co/cUF1eFEhem.png – peter

Verwandte Themen