Mat*_*ish 277
SELECT MAX( col )
FROM table
WHERE col < ( SELECT MAX( col )
FROM table )
Run Code Online (Sandbox Code Playgroud)
小智 58
SELECT MAX(col) FROM table WHERE col NOT IN (SELECT MAX(col) FROM table);
Run Code Online (Sandbox Code Playgroud)
Kei*_*ith 30
在T-Sql中有两种方法:
--filter out the max
select max( col )
from [table]
where col < (
select max( col )
from [table] )
--sort top two then bottom one
select top 1 col
from (
select top 2 col
from [table]
order by col) topTwo
order by col desc
Run Code Online (Sandbox Code Playgroud)
在Microsoft SQL中,第一种方法的速度是第二种方式的两倍,即使相关列是群集的.
这是因为与max
聚合使用的表或索引扫描相比,排序操作相对较慢.
或者,在Microsoft SQL 2005及更高版本中,您可以使用以下ROW_NUMBER()
功能:
select col
from (
select ROW_NUMBER() over (order by col asc) as 'rowNum', col
from [table] ) withRowNum
where rowNum = 2
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 20
我在这里看到了一些特定于SQL Server和一些MySQL特定的解决方案,因此您可能想要澄清所需的数据库.虽然如果我不得不猜测我会说SQL Server,因为这在MySQL中是微不足道的.
我也看到一些不起作用的解决方案,因为它们没有考虑到重复的可能性,所以要小心你接受哪些.最后,我看到一些会起作用但会对表进行两次完整扫描.您希望确保第二次扫描仅查看2个值.
SQL Server(2012年之前):
SELECT MIN([column]) AS [column]
FROM (
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
) a
Run Code Online (Sandbox Code Playgroud)
MySQL的:
SELECT `column`
FROM `table`
GROUP BY `column`
ORDER BY `column` DESC
LIMIT 1,1
Run Code Online (Sandbox Code Playgroud)
更新:
SQL Server 2012现在支持更清晰(和标准)的OFFSET/FETCH语法:
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
dgu*_*lia 13
我想你可以这样做:
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT 1 OFFSET 1
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT (1, 1)
Run Code Online (Sandbox Code Playgroud)
取决于您的数据库服务器.提示:SQL Server不执行LIMIT.
小智 7
您可以使用以下查询找到列的第二大值
SELECT *
FROM TableName a
WHERE
2 = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE
a.ColumnName <= b.ColumnName);
Run Code Online (Sandbox Code Playgroud)
您可以在以下链接中找到更多详细信息
http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html
最简单的方法是从应用程序中的结果集中获取第二个值:
SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2
Run Code Online (Sandbox Code Playgroud)
但是,如果必须使用SQL选择第二个值,那么如何:
SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t
Run Code Online (Sandbox Code Playgroud)
小智 6
一个非常简单的查询来查找第二大值
SELECT `Column`
FROM `Table`
ORDER BY `Column` DESC
LIMIT 1,1;
Run Code Online (Sandbox Code Playgroud)
MSSQL
SELECT *
FROM [Users]
order by UserId desc OFFSET 1 ROW
FETCH NEXT 1 ROW ONLY;
Run Code Online (Sandbox Code Playgroud)
MySQL
SELECT *
FROM Users
order by UserId desc LIMIT 1 OFFSET 1
Run Code Online (Sandbox Code Playgroud)
不需要子查询......只需跳过一行并按降序选择第二行
归档时间: |
|
查看次数: |
368918 次 |
最近记录: |