SQL Serverで最後の行を読み取る最も効率的な方法は何ですか?
テーブルは一意のキーでインデックス付けされます。「下の」キー値は最後の行を表します。
回答:
MS SQLを使用している場合は、次のことを試すことができます。
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESCし、最後の1000レコードを出力する必要があります。
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykeyはあなたのテーブルインデックスです
mykeyが一意の識別子である場合、このアプローチは役に立ちません
自動入力の主キーや日時列(できれば主キー)など、テーブル内に一意に識別する何らかの列が必要になります。次に、これを行うことができます:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
ORDER BY columnその列のデータに基づいて結果をrearangeするように指示し、DESCその結果(従って最初の最後のものを置く)を逆にすることを指示します。その後、LIMIT 11行だけを返すように指示します。
以下のクエリは、並べ替え可能な列がなくても最大のパフォーマンスを発揮するSQLServerで機能すると思います
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
あなたがそれを理解したことを願っています... :)
SQlサーバー2008のSQLクエリでlastを使用しようとしましたが、次のエラーが発生します。「 'last'は認識された組み込み関数名ではありません。」
だから私は使用することになった:
select max(WorkflowStateStatusId) from WorkflowStateStatus
最後の行のIDを取得します。使用することもできます
Declare @i int
set @i=1
select WorkflowStateStatusId from Workflow.WorkflowStateStatus
where WorkflowStateStatusId not in (select top (
(select count(*) from Workflow.WorkflowStateStatus) - @i ) WorkflowStateStatusId from .WorkflowStateStatus)
last_valueを使用できます: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
データベースの1つでテストしたところ、期待どおりに機能しました。
ここでドキュメントを確認することもできます:https://msdn.microsoft.com/en-us/library/hh231517.aspx
これを試して
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
LIMIT。このリターンIncorrect syntax near LIMIT
MS SQLデータベース2005のテーブルの最後の行を取得するには、次のクエリを使用できます。
select top 1 column_name from table_name order by column_name desc;
注: MS SQLデータベース2005のテーブルの最初の行を取得するには、次のクエリを使用できます。
select top 1 column_name from table_name;
select top 1注文なしでは、最初のレコードを取得するための信頼できる方法ではありません。で注文しない場合は、SQLに許可を与えて、必要なレコードを提供します。
OFFSETおよびFETCH NEXTは、結果を表示しながらSQLページングを実現するSQL Server2012の機能です。
OFFSET引数は、結果からの戻り行に開始行を決定するために使用され、FETCH引き数は、行の数のセットを返すために使用されます。
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
順序付けられた列がない場合は、各行の物理IDを使用できます。
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
レプリケートされたテーブルがある場合は、localDatabaseにIdentity = 1000、clientDatabaseにIdentity = 2000を設定できます。したがって、最後のIDを取得すると、現在接続されているデータベースの最後ではなく、常にクライアントの最後のIDを見つけることができます。したがって、最後に接続されたデータベースを返す最良の方法は次のとおりです。
SELECT IDENT_CURRENT('tablename')
テーブルの「最後の値」を取得していません。金融商品ごとの最後の値を取得しています。それは同じではありませんが、「今どのように行われているのか」を調べようとしている人にとっては関係があると思います。また、RowNumber()とCTEを使用し、その前に1を取り、[column] descで並べ替えました。しかし、私たちはもはやする必要はありません...
私はSQLServer 2017を使用しており、世界中のすべての取引所ですべてのティックを記録しています。1日あたり最大120億ティックがあり、ティックのボリュームと属性(ビッド、アスク、トレード)を含む各ビッド、アスク、トレードを保存しています。 )指定された取引所のいずれか。
そのテーブルには、任意の契約(主に統計)の253種類のティックデータがあり、最後に取引された価格はティックタイプ= 4であるため、使用する価格の「最後」を取得する必要がある場合は、次のようになります。
select distinct T.contractId,
LAST_VALUE(t.Price)over(partition by t.ContractId order by created ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
from [dbo].[Tick] as T
where T.TickType=4
非常に効率的に実行され、ExchangeインポートETLがデータをテーブルにポンプしている間、4秒で実行される私の開発システムの実行プランを見ることができます。ロックが発生すると、速度が低下します...これがライブシステムの動作方法です。

SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)