Se è necessaria una riga intera (tutte le colonne), questa operazione verrà eseguita. Inoltre, restituirà sempre solo una riga, anche se ce ne sono diverse con lo stesso 2 ° valore massimo.
Select top 1 *
From (Select Top 2 *
From TABLE
Order By marks desc
) a
Order By marks asc
Se si desidera solo una riga con il valore reale 2 ° max, si dovrebbe usare:
select Top 1 *
from TABLE
where marks < (select max(marks) from TABLE)
Order by max desc
Potrebbe essere fatto da CTE (SQL Server 2005 +) troppo:
;With a as
(
Select Dense_Rank() over (order by marks desc) as nRank,
*
From TABLE
)
Select Top 1 *
from a
Where nRank=2
Se si desidera vedere tutte le righe con i secondi segni massimi, rimuovere TOP 1 dalla query precedente.
Che cosa non ti piace di LIMIT? – Unreason
quella era una domanda di intervista;) – viMaL
Penso che la domanda avrebbe potuto essere risolverlo senza utilizzare ORDER BY e LIMIT. poiché l'ordine richiede l'ordinamento in O (n * log (n)), mentre l'intervistatore stava cercando O (n) – dharm0us