回答:
SELECT MAX( col )
FROM table
WHERE col < ( SELECT MAX( col )
FROM table )
T-SQLには2つの方法があります。
--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
Microsoft SQLでは、問題の列がクラスター化されている場合でも、最初の方法は2番目の方法の2倍高速です。
これは、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
ここでは、SQL Server固有のソリューションとMySQL固有のソリューションの両方を確認しているので、必要なデータベースを明確にしたいと思うかもしれません。私が推測しなければならないのであれば、これはMySQLでは些細なことなのでSQLサーバーと言います。
また、重複の可能性を考慮に入れていないため機能しないソリューションもいくつかあるので、どのソリューションを受け入れるか注意してください。最後に、いくつかは機能しますが、テーブルの2つの完全なスキャンが行われます。2番目のスキャンが2つの値のみを確認していることを確認します。
SQL Server(2012より前):
SELECT MIN([column]) AS [column]
FROM (
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
) a
MySQL:
SELECT `column`
FROM `table`
GROUP BY `column`
ORDER BY `column` DESC
LIMIT 1,1
更新:
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;
n
。これはそのテストに耐えます。
TOP
し、OFFSET
同じクエリ内を。
私はあなたが次のようなことをすることができると思います:
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT 1 OFFSET 1
または
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT (1, 1)
データベースサーバーによって異なります。ヒント:SQL ServerはLIMITを実行しません。
OFFSET 2
最も簡単なのは、アプリケーションのこの結果セットから2番目の値を取得することです。
SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2
しかし、SQLを使用して2番目の値を選択する必要がある場合は、次のようにします。
SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t
LIMIT
MySql構文です。質問はSQLバージョンを指定しません。
次のクエリを使用して、列の2番目に大きい値を見つけることができます
SELECT *
FROM TableName a
WHERE
2 = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE
a.ColumnName <= b.ColumnName);
あなたは次のリンクで詳細を見つけることができます
http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html
SELECT MAX(Salary) FROM Employee WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
このクエリは結果から最大給与を返します-これにはテーブル全体の最大給与は含まれていません。
これは非常に単純なコードです。これを試すことができます:-
例:テーブル名= test
salary
1000
1500
1450
7500
2番目に大きい値を取得するMSSQLコード
select salary from test order by salary desc offset 1 rows fetch next 1 rows only;
ここで「オフセット1行」とはテーブルの2行目を意味し、「次の1行のみフェッチ」はその1行のみを表示するためのものです。「次の1行のみフェッチ」を使用しない場合は、2行目のすべての行が表示されます。
select max(column_name) from table_name
where column_name not in (select max(column_name) from table_name);
not inは、column_nameの最高値を除外する条件です。
参考:プログラマーインタビュー
SQLデータベーステーブルのn番目の行を選択する方法を参照してください。。
Sybase SQL Anywhereは以下をサポートします。
SELECT TOP 1 START AT 2 value from table ORDER BY value