Si necesita toda la fila (todas las columnas), esta lo hará. Además, siempre devolverá solo una fila, incluso si hay varias con el mismo segundo valor máximo.
Select top 1 *
From (Select Top 2 *
From TABLE
Order By marks desc
) a
Order By marks asc
Si desea sólo una fila con el valor máximo segunda real, se debe utilizar:
select Top 1 *
from TABLE
where marks < (select max(marks) from TABLE)
Order by max desc
Podría hacerse mediante la CTE (SQL Server 2005 +) también:
;With a as
(
Select Dense_Rank() over (order by marks desc) as nRank,
*
From TABLE
)
Select Top 1 *
from a
Where nRank=2
Si desea ver todas las filas con la segunda marca máxima, simplemente elimine TOP 1 de la consulta anterior.
¿Qué es lo que no te gusta de LIMIT? – Unreason
que fue una pregunta de la entrevista;) – viMaL
Creo que la pregunta pudo haber sido resolverlo sin usar ORDER BY y LIMIT. desde el pedido requiere ordenar en O (n * log (n)), mientras que el entrevistador buscaba O (n) – dharm0us