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