SQL: Was ist das Gegenteil von SELECT TOP?

Angenommen man will die aktuellsten 3 Nachrichten darstellen. Dann sieht das, z.B. für Access/SQL Server, so aus:

SELECT TOP 3 *
FROM News
ORDER BY Date DESC

Soweit, so klar.

 

Alle älteren Nachrichten, außer den 3 Aktuellsten,  sollen nun auf einer Archivseiten dargestellt werden. Und dazu brauchen wir das Gegenteil von SELECT TOP.

1. Versuch:

SELECT TOP 3 *
FROM News
ORDER BY Date ASC

Es erscheinen die letzten 3 Nachrichten. Allerdings nur die letzten 3 und (natürlich) auch in verkehrter Reihenfolge.

2. Versuch:

SELECT *
FROM (SELECT TOP 3 *
  FROM News
  ORDER BY Date DESC)
ORDER BY Date ASC

Die Reihenfolge stimmt jetzt, aber die Anzahl der Nachrichten ist nicht variabel. Es werden nur 3 und nicht wie gewünscht der Rest selektiert.

3. Versuch:

SELECT *
FROM News
WHERE ID NOT IN (SELECT TOP 3 ID
               FROM News
               ORDER BY Date DESC)
ORDER BY Date DESC

Bingo!

Quelle: Rich Claussen

SQL

Juni 2007 | Permalink | Feedback