Wenn Sie eine ganze Zeile (alle Spalten) benötigen, wird diese Aufgabe erledigt. Außerdem gibt es immer nur eine Zeile zurück, auch wenn es mehrere mit dem gleichen zweiten Maximalwert gibt.
Select top 1 *
From (Select Top 2 *
From TABLE
Order By marks desc
) a
Order By marks asc
Wenn Sie mit echten zweiten Maximalwert nur eine Zeile wollen, sollten Sie verwenden:
select Top 1 *
from TABLE
where marks < (select max(marks) from TABLE)
Order by max desc
Es könnte auch von CTE (SQL Server 2005+) erfolgen:
;With a as
(
Select Dense_Rank() over (order by marks desc) as nRank,
*
From TABLE
)
Select Top 1 *
from a
Where nRank=2
Wenn Sie alle Zeilen mit den 2. Max-Markierungen sehen möchten, entfernen Sie einfach TOP 1 von der vorherigen Abfrage.
Was magst du an LIMIT nicht? – Unreason
das war eine Interviewfrage;) – viMaL
Ich denke, die Frage hätte sein können, es ohne ORDER BY und LIMIT zu lösen. da order by die Sortierung in O (n * log (n)) erfordert, während der Interviewer nach O (n) suchte – dharm0us