Nếu bạn cần toàn bộ hàng (tất cả các cột), điều này sẽ làm điều đó. Ngoài ra, nó sẽ luôn trả về chỉ một hàng, ngay cả khi có một số có cùng giá trị lớn nhất thứ 2.
Select top 1 *
From (Select Top 2 *
From TABLE
Order By marks desc
) a
Order By marks asc
Nếu bạn muốn chỉ có một hàng với giá trị tối đa 2 sản, bạn nên sử dụng:
select Top 1 *
from TABLE
where marks < (select max(marks) from TABLE)
Order by max desc
Nó có thể được thực hiện bằng cách CTE (SQL Server 2005 +) quá:
;With a as
(
Select Dense_Rank() over (order by marks desc) as nRank,
*
From TABLE
)
Select Top 1 *
from a
Where nRank=2
Nếu bạn muốn xem tất cả các hàng có dấu tối đa thứ 2, chỉ cần xóa TOP 1 khỏi truy vấn trước đó.
Bạn không thích gì về LIMIT? – Unreason
đó là một câu hỏi phỏng vấn;) – viMaL
Tôi nghĩ câu hỏi có thể là giải quyết nó mà không cần sử dụng ORDER BY và LIMIT. kể từ khi yêu cầu sắp xếp trong O (n * log (n)), trong khi người phỏng vấn đang tìm O (n) – dharm0us