Если вам нужна целая строка (все столбцы), этот сделает это. Кроме того, он всегда будет возвращать только одну строку, даже если есть несколько с одинаковым 2-м максимальным значением.
Select top 1 *
From (Select Top 2 *
From TABLE
Order By marks desc
) a
Order By marks asc
Если вам нужна только одна строка с реальным 2-м максимальным значением, вы должны использовать:
select Top 1 *
from TABLE
where marks < (select max(marks) from TABLE)
Order by max desc
Это также может быть сделано CTE (SQL Server 2005+):
;With a as
(
Select Dense_Rank() over (order by marks desc) as nRank,
*
From TABLE
)
Select Top 1 *
from a
Where nRank=2
Если вы хотите увидеть все строки с отметками 2-го максимума, просто удалите TOP 1 из предыдущего запроса.