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이 방법 식별자 고유 것없는 도움
자동 채우기 기본 키 또는 datetime 열 (바람직하게는 기본 키)과 같이 테이블에 고유하게 식별되는 열이 필요합니다. 그런 다음 이렇게 할 수 있습니다.
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
는 ORDER BY column그 열의 데이터에 따른 결과를 rearange하도록 지시하고는 DESC(즉 제 마지막 퍼팅) 결과를 반전을 말한다. 그 후는 LIMIT 1한 행만 다시 전달 하도록 지시합니다.
SQl Server 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)...
내 데이터베이스 중 하나에서 테스트했는데 예상대로 작동했습니다.
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이 원하는 레코드를 제공하도록 허용합니다.
Replicated 테이블이있는 경우 localDatabase에 Identity = 1000, clientDatabase에 Identity = 2000을 가질 수 있으므로 마지막 ID를 잡으면 현재 연결된 데이터베이스의 마지막 ID가 아니라 항상 클라이언트의 마지막 ID를 찾을 수 있습니다. 따라서 마지막으로 연결된 데이터베이스를 반환하는 가장 좋은 방법은 다음과 같습니다.
SELECT IDENT_CURRENT('tablename')
나는 테이블에서 "마지막 가치"를 얻는 것이 아니라 금융 상품당 마지막 가치를 얻고 있습니다. 똑같지는 않지만 "지금 어떻게 됐는지"를 찾고자하는 사람들과 관련이 있다고 생각합니다. 또한 RowNumber () 및 CTE를 사용하여 1을 취하고 [column] desc로 정렬했습니다. 그러나 우리는 더 이상 ...
저는 SQL Server 2017을 사용하고 있으며, 전 세계 모든 거래소에서 모든 틱을 기록하고 있으며, 하루에 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
내 개발 시스템에서 실행 계획이 매우 효율적으로 실행되고, 교환 가져 오기 ETL이 데이터를 테이블로 펌핑하는 동안 4 초 내에 실행되는 것을 볼 수 있습니다. 잠금이 느려질 것입니다 ... 그게 라이브 시스템이 작동하는 방식입니다.

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